A batch-file - это просто серия команд, разделенных новыми строками:
Move *.docx "%UserProfile%\Documents\NewDirectory"
Move *.pdf "%UserProfile%\Documents\NewDirectory"
Move *.txt "%UserProfile%\Documents\NewDirectory"
Move *.xls "%UserProfile%\Documents\NewDirectory"
Или конкатенации, (амперсанд &
) :
Move *.docx "%UserProfile%\Documents\NewDirectory" & Move *.pdf "%UserProfile%\Documents\NewDirectory" & Move *.txt "%UserProfile%\Documents\NewDirectory" & Move *.xls "%UserProfile%\Documents\NewDirectory"
Вы также можете использовать for-loop :
For %%I In (docx pdf txt xls) Do Move "*.%%I" "%UserProfile%\Documents\NewDirectory"
Самая большая проблема всех вышеперечисленных методов заключается в том, что для большинства команд Windows видит *.ext
как любое расширение, начинающееся с .ext
, это означает, например, что .xls
на самом деле будет также включать расширения .xlsb
, .xlsm
и .xlsx
.
Существует несколько способов предотвращениятаких проблем, во-первых, использовать if
команды:
For %%I In (docx pdf txt xls) Do If /I Not "%%~xI"==".xlsb" If /I Not "%%~xI"==".xlsm" If /I Not "%%~xI"==".xlsx" Move "*.%%I" "%UserProfile%\Documents\NewDirectory"
Фильтруя результаты с помощью findstr :
For /F "EOL=? Delims=" %%I In ('Dir /B /A:-D *.docx *.pdf *.txt *.xls 2^>NUL ^| "%__AppDir__%findstr.exe" /V /I "\.xlsb$ \.xlsm$ \.xlsx$"') Do Move "*.%%I" "%UserProfile%\Documents\NewDirectory"
Проблема со всемиМетоды, описанные выше, заключаются в том, что они ожидают, что каталог назначения действительно будет существовать первым, что означает, что вам нужно использовать команду MD
, то есть MD "%UserProfile%\Documents\NewDirectory" 2>NUL
Использование robocopy , (который, несмотря на свое имя, может также move
файлы) , каталог назначения также будет создан автоматически, еслион еще не существует, и вы можете использовать его опцию /XF
, чтобы исключить эти, возможно, мошеннические расширения файлов:
"%__AppDir__%Robocopy.exe" "." "%UserProfile%\Documents" *.docx *.pdf *.txt *.xls /Mov /XF *.xlsb *.xlsm *.xlsx
Я использовал "."
для представления текущего каталога в качестве исходного каталога, (вы, конечно, можете использовать определенный полный или относительный путь, если требуется) .