Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Помогите задать параметр exclude команды xcopy из переменной без промежуточного файла

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

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: 15551
Дата: 18-04-2019
Если это возможно, конечно же. (Система - 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:<%list% или <!list! - так он явно не работает, xcopy такого "файла" не видит.

Пробовал перенаправлением дескрипторов (<&n где n - цифра от 0 до 9) - вообще не понял как их правильно использовать, не говоря уж о том как их использовать для xcopy. Идея была - записать %list% в неиспользуемый дескриптор, затем перенаправить его:

echo %list% >&3
xcopy c:\new \\server\vasya\new\ /e /h /k /q /exclude:<&3

В этом случае как раз xcopy и не ругается, просто переписывает весь каталог ничего не исключая.
Откуда у меня и возникло предположение, что как-то сделать это можно, но как - не знаю, вот спрашиваю у сообщества.


(Про robocopy я слышал, но разбираться с ним, проверять надёжность/скорость, менять ключи, сообщать людям об необходимости наличия дополнительной утилиты - в общем КМК не стоит оно того, учитывая что xcopy выше - находится в отдельной ф-ии, вызываемой в батнике с разных мест с разными параметрами и ключами для того xcopy.)

Отправлено: 12:47, 18-04-2019

 

Ветеран


Contributor


Сообщения: 2703
Благодарности: 1683

Профиль | Отправить PM | Цитировать


Как Вам такое извращение? (в 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:
задача - раскидывание папок по разным сетевым папкам в зависимости от названия) »
Может, лучше поискать другой способ? (тогда надо более подробное изложение задачи)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 18-04-2019 в 19:21.


Отправлено: 18:57, 18-04-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

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

Отправлено: 20:03, 18-04-2019 | #3


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


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
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:21, 18-04-2019 | #4


Ветеран


Contributor


Сообщения: 2703
Благодарности: 1683

Профиль | Отправить PM | Цитировать


ИМХО, лучше сделать код кратко и надёжно с созданием служебного файла, чем городить многострочный код.
Цитата alpap:
можно загнать в исключение и без 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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:49, 19-04-2019 | #5


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата megaloman:
xcopy хорош »
я вообще тоже за него и с учетом
Цитата 15551:
у меня переменная %list% собирается "на ходу", в зависимости от внешних условий »
как по мне так гораздо проще редактировать txt, особенно с учетом того что сам bat может лежать в кладовой для bat, а txt под рукой.

Отправлено: 15:55, 19-04-2019 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Помогите задать параметр exclude команды xcopy из переменной без промежуточного файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - XCOPY с переменными из ini-файла. Gradspb Скриптовые языки администрирования Windows 6 19-05-2016 13:10
CMD/BAT - [решено] Подстановка переменной из TXT файла crun4 Скриптовые языки администрирования Windows 2 09-09-2014 13:01
В XCOPY не работает EXCLUDE AlexKKK Microsoft Windows NT/2000/2003 3 15-02-2008 14:52
[решено] использование команды xcopy maslinaV Хочу все знать 3 29-06-2006 19:45
Повтор в цикле команды XCopy babki Программирование и базы данных 6 29-11-2005 10:22




 
Переход