У меня есть пакетный файл, который получает от 1 до 9 файлов (или более), и он должен скопировать эти файлы в набор папок. Может кто-нибудь мне помочь?

Я пытаюсь сделать что-то вроде этого:

for /L %%i in (1,1,9) do (
   copy %%i "\Folder1"
   copy %%i "\Folder3"
   copy %%i "\Folder5"
....
)

Скопировать файл1, переданный в качестве параметра% 1, во все папки назначения, затем файл 2 из% 2 и т.д. Но я не знаю, что писать вместо %% 1 в процедуре do ()

2 ответа2

3

Хотя ответ LotPings будет работать, более простой ответ, который ближе к попытке в исходном вопросе и избегает неуклюжего goto , будет:

for %%i in (%*) do (
   copy %%i "\Folder1"
   copy %%i "\Folder3"
   copy %%i "\Folder5"
....
)

Здесь %* расширяется до полного списка параметров, каким бы длинным он ни был, а оператор for учитывает любые кавычки, проходя по очереди все параметры, как указано. Опять же, нет никаких ограничений на 9 параметров, хотя пакетные файлы имеют общий максимум 255 параметров.

2

Чтобы не ограничиваться 9 аргументами, я бы использовал цикл с goto и сдвигом, пока не осталось аргументов.

:: Q:\Test\2018\11\23\SU_1377880.cmd
@Echo off
:loop
if "%~1"=="" goto :Eof
if exist "%~1" (
    copy %1 "\Folder1"
    copy %1 "\Folder3"
    copy %1 "\Folder5"
) else ( Echo %1 not found )
shift
goto :loop

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .