3

У меня есть однострочный скрипт, который рекурсивно копирует все файлы ".ext1" из текущей папки в папку назначения:

xcopy *.ext1 D:\dest /s /d /y

Работает отлично.

Теперь я хочу скопировать все * .ext2. Вместо копирования (это прекрасно работает):

xcopy *.ext1 D:\dest /s /d /y
xcopy *.ext2 D:\dest /s /d /y

Я хочу использовать for команды:

for %%f in (*.ext1 *.ext2) do xcopy %%f D:\dest /s /d /y

Но это не работает:

  1. Не копирует подкаталоги исходной папки
  2. Он не копирует файлы с именами с пробелами типа «read me.ext1»

Я пытался использовать клавишу /R :

for /R %%f in (*.ext1 *.ext2) do xcopy %%f D:\dest /s /d /y

но это привело к копированию исходных файлов subdir в корневую папку dest. И имена с пробелами не пошли.

Что такое правильная форма for команды будет?

3 ответа3

5

попробуй это:

for %%f in (.ext1 .ext2) do xcopy *%%f D:\dest /s /d /y
1

Насколько я могу судить, ваш единственный вариант - вызывать xcopy несколько раз. Если вы хотите иметь какое-то повторное использование кода, я вижу два варианта:

Определите параметры как переменные и используйте их:

set dest=d:\dest
set options=/s /d /y

xcopy *.ext1 %dest% %options%
xcopy *.ext2 %dest% %options%

или создайте подпрограмму для копирования:

call :do_copy ext1
call :do_copy ext2

goto :eof

:do_copy
   xcopy *.%1 d:\dest /s /d /y
   goto :eof
0

Вы не можете включать подстановочные знаки в регулярные for потому что они всегда будут расширены (или игнорируются, если нет совпадения). Если ответ Endoro вам не подходит, вы можете прочитать список подстановочных знаков из файла или из вывода команды. Пример:

for /f %%f in ('echo *.ext1 ^& echo *.ext2') do xcopy %%f D:\dest /s /y

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