Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Пакетное перемещение файлов с пробелами в имени.

Автор вопроса: Idea BakОтветов: 2

Я надеюсь, что некоторые могут мне помочь. Я провел последние несколько дней в поисках ответов в Google и ничего не нашел. У меня есть код из двух частей: первый извлекает все из подпапок, а затем вторая часть перемещает эти файлы по типу в другие папки, расположенные в другом месте. Я могу заставить код работать в тестовой настройке, но он не будет работать с файлами, которые я пытаюсь переместить. Я думаю, что это связано с именами файлов, в которых есть пробелы, но я не уверен. Вот коды. Спасибо, парни!

Часть первая

FOR /R C:\Users\Laptop02\Desktop\Folder 1 Test  %%i IN (*.*) DO MOVE %%i C:\Users\Laptop02\Desktop\Folder 1 Test

Вторая часть

@echooff
set media=C:\Users\Laptop02\Desktop\Foder 2 Test
set jpg=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata
set xml=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata

move %dlDir%*.avi %media%
move %dlDir%*/*.avi %meia%
move %dlDir%*.mp4 %media%
move %dlDir%*/*.mp4 %media%
move %dlDir%*.mkv %media%
move %dlDir%*/*.mkv %media%
move %dlDir%*.jpg %jpg%
move %dlDir%**.xml %xml%

Спасибо еще раз.

filebatch-filedirectorynames

Ответы

Ответ 1 · рейтинг 2 · David Ruhmann

Хотя команда перемещения хороша и метод, описанный выше, работает, копирование или перемещение большого количества файлов должно быть быстрее с помощью следующей команды robocopy с поддержкой многопоточности:

@echo off
set "source=C:\Users\Laptop02\Desktop\Folder 1 Test"
set "media=C:\Users\Laptop02\Desktop\Foder 2 Test"
set "jpg=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata"
set "xml=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata"
robocopy /s /mov /mt "%source%" "%media%" *.avi
robocopy /s /mov /mt "%source%" "%media%" *.mp4
robocopy /s /mov /mt "%source%" "%media%" *.mkv
robocopy /s /mov /mt "%source%" "%jpg%" *.jpg
robocopy /s /mov /mt "%source%" "%xml%" *.xml
pause

Кроме того, было бы быстрее переместить файлы только один раз:

@echo off
set "source=C:\Users\Laptop02\Desktop\Folder 1 Test"
set "media=C:\Users\Laptop02\Desktop\Foder 2 Test"
set "jpg=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata"
set "xml=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata"

cd "%source%"
for /r "%~dp0" %%A in (*) do (
    if "%%~xA"==".avi" move "%%~A" "%media%\"
    if "%%~xA"==".mp4" move "%%~A" "%media%\"
    if "%%~xA"==".mkv" move "%%~A" "%media%\"
    if "%%~xA"==".jpg" move "%%~A" "%jpg%\"
    if "%%~xA"==".xml" move "%%~A" "%xml%\"
)
pause

Ответ 2 · рейтинг 3 · Eric J.

Вам нужно заключать в кавычки файлы, в имени которых могут быть пробелы, например.

move "%dlDir%*.avi" "%media%"

ОБНОВЛЕНИЕ

Для части for добавьте

"delims="

как это:

FOR /F "delims=" IN (dir /b /s "C:\Users\Laptop02\Desktop\Folder 1 Test")

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы