Вместо того, чтобы запускать xcopy 6 раз, есть ли способ определить массив файлов для копирования?
xcopy \\\from_location\\(A,B,C,D,E)*.txt \\\to_location\
Не только с XCOPY. Но простое утверждение FOR может помочь:
for %A in (A B C D E) do xcopy "fromPath\%A*.txt" "toPath"
Я не уверен в каких-либо нативных способах сделать это, но вы можете просмотреть этот пост для получения информации о графическом интерфейсе и инструменте командной строки, в котором есть все возможные способы переименования файлов с шаблонами.
Если вы используете версию этого инструмента для командной строки и добавите ее в PATH
, вы сможете использовать ее из командного файла.
Ссылка MaQleod предоставляет ответ Powershell, но если вы заинтересованы в ответе на пакетный скрипт, вот один из способов сделать это:
@echo off
set __fileset.1=a*.txt
set __fileset.2=b*.txt
set __fileset.3=c*.txt
set __fileset.4=d*.txt
set __fileset.5=e*.txt
for /f "tokens=2* delims=.=" %%g in ('SET __fileset.') do call :CopySet "%%h"
goto :exit
:CopySet
echo xcopy "%~dpxn1" "\to_location\." /v
goto :eof
:exit
Используя __fileset.
переменные окружения, вы создаете псевдомассив в пакетном файле. Затем вы используете цикл for
для обхода всех доступных значений и вызываете вспомогательный CopySet
для выполнения фактической команды копирования. Конечно, скрипт может быть улучшен, но это всего лишь пример того, как это сделать.
Убедитесь, что последняя строка в пакетном скрипте пуста, так как она используется командой goto :eof
для завершения подпрограммы и возврата к предыдущей вызывающей строке.