CMD/BAT - Помогите задать параметр exclude команды xcopy из переменной без промежуточного файла

Ответить
Аватара пользователя
15551

CMD/BAT - Помогите задать параметр exclude команды xcopy из переменной без промежуточного файла

Сообщение 15551 »

Если это возможно, конечно же. (Система - Windows XP, задача - раскидывание папок по разным сетевым папкам в зависимости от названия)



Сильно упрощённо через промежуточный файл код выглядит так:



set list=(тут формирование условия для exclude)

echo %list% > c:\file.txt

xcopy c:\new \\server\vasya\new\ /e /h /k /q /exclude:c:\file.txt



С целью, так сказать, шлифовки кода желаю обойтись без промежуточного файла, но не знаю как задать /exclude прямо из переменной list. Пробовал оператор перенаправления /exclude:
Аватара пользователя
megaloman

Re: CMD/BAT - Помогите задать параметр exclude команды xcopy из переменной без промежуточного файла

Сообщение megaloman »

Как Вам такое извращение? (в XP не проверял). Самому смешно, но работает! Изображение Переменная list не нужна. Проверено, если список будет задан с отступом, то он в исключения не попадет.

Код:

Код: Выделить всё

	@Echo Off
		xcopy Box_In\*.* Box_Out\ /s /EXCLUDE:%~dpnx0
	Exit /B
.js
.bat
\Муз\

Если батник длинный, то, скорее всего, этот плод воспалённого воображения будет работать медленно. Может быть, так будет оптимальнее...

Код:

Код: Выделить всё

	@Echo Off
	GoTo :Begin
.js
.bat
\Муз\
	:Begin
		xcopy Box_In\*.* Box_Out\ /s /EXCLUDE:%~dpnx0
	Exit /B


Цитата 15551:



задача - раскидывание папок по разным сетевым папкам в зависимости от названия)
CMD/BAT - Помогите задать параметр exclude команды xcopy из переменной без промежуточного файла




Может, лучше поискать другой способ? (тогда надо более подробное изложение задачи)
Аватара пользователя
15551

Re: CMD/BAT - Помогите задать параметр exclude команды xcopy из переменной без промежуточного файла

Сообщение 15551 »

Использовать в к-ве списка самого себя - идея!



Но у меня переменная %list% собирается "на ходу", в зависимости от внешних условий, там в "set list=(тут формирование условия для exclude)" это самое формирование условия состоит из кучи IF-ов, так что жёстко задать список не получается.



И другой способ - я не представляю себе как. Подробное изложение - раз за разом в отдельную папку местное ПО на работу которого я повлиять не могу выгружает до десятка папок, в них - где пара штук, где пара десятков файлов, и в самой корневой папке - тоже файлы, но уже несколько десятков. Эти папки/файлы в зависимости от имени батником раскидываются по разным операторам, в зависимости от того чей комп сейчас включён, кому какая информация свойственна да ещё и делится чтобы не было одному пусто, другому густо. (это всё в вышеупомянутых IF-ах определяется)
Аватара пользователя
alpap

Re: CMD/BAT - Помогите задать параметр exclude команды xcopy из переменной без промежуточного файла

Сообщение alpap »

15551,

можно загнать в исключение и без xcopy, например так:



Код:

Код: Выделить всё

@echo off
set "excl="*.js" "*.bat" "Муз*""
for /f "delims=" %%a in ('dir /b %excl%') do set "%%~nxa=Exclude"
for /f "delims=" %%a in ('dir /b') do if not defined %%~nxa echo %%~nxa
pause
Аватара пользователя
megaloman

Re: CMD/BAT - Помогите задать параметр exclude команды xcopy из переменной без промежуточного файла

Сообщение megaloman »

ИМХО, лучше сделать код кратко и надёжно с созданием служебного файла, чем городить многострочный код.
Цитата alpap:



можно загнать в исключение и без xcopy, например так:
CMD/BAT - Помогите задать параметр exclude команды xcopy из переменной без промежуточного файла




Красиво придумано, для меня открытие, что имя переменной в CMD может содержать пробелы. Интересно, есть ли ограничение на длину идентификатора? Но, тем не менее, xcopy хорош тем, что создаёт нужную структуру каталогов при копировании. Вот код, который имитирует /Exclude, в качестве развлечения:

Код:

Код: Выделить всё

@Echo Off
	Set "BoxIn=Z:\Box_In"
	Set "BoxOut=Z:\Box_Out"
	Set "Ext@@001=.js"
	Set "Ext@@002=.bat"
	Set "Ext@@003=\Муз\"
	FOR /F "usebackq delims=" %%x IN (`xcopy /L /S /E /F /Y "%BoxIn%\*.*" "%BoxOut%\"`) DO (
		Set "S=%%~dpx"
		Call :ExtCopy "%%S: -> =" "%%" 
	)
Exit /B
:ExtCopy
	If "%~2"=="" Exit /B 0 
	Set "SS=%~1"
	Set "SSS=%SS%"
	FOR /F "usebackq tokens=2 delims==" %%e IN (`Set "Ext@@"`) DO Call Set "SSS=%%SSS:%%e=%%"
	If "%SS%"=="%SSS%" (
		>nul xcopy /Y %1 %2
	)
Exit /B
Аватара пользователя
alpap

Re: CMD/BAT - Помогите задать параметр exclude команды xcopy из переменной без промежуточного файла

Сообщение alpap »

Цитата megaloman:



xcopy хорош
CMD/BAT - Помогите задать параметр exclude команды xcopy из переменной без промежуточного файла




я вообще тоже за него и с учетом


Цитата 15551:



у меня переменная %list% собирается "на ходу", в зависимости от внешних условий
CMD/BAT - Помогите задать параметр exclude команды xcopy из переменной без промежуточного файла




как по мне так гораздо проще редактировать txt, особенно с учетом того что сам bat может лежать в кладовой для bat, а txt под рукой.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»