Обратите внимание: вы не можете использовать подстановочные знаки с move
.
(и, пожалуйста, создайте file_list
-> dir_list
для ясности.)
@echo off
Setlocal EnableDelayedExpansion
set dir_list=ready.txt
set dest_folder=c:\small\final\ok
mkdir %dest_folder%
for /f "delims=" %%a IN (%dir_list%) do (
set dir=%%a
if "!dir:~-1!"=="\" set dir=!dir:~0,-1!
move "!dir!" "%dest_folder%\"
)
Для каталогов в ready.txt
с задней \
к \
будут удалены перед move
Редактировать:
Поскольку вы перемещаете каталоги с одного диска на другой, вы не можете использовать команду move
. Вот решение с robocopy
:
@echo off
Setlocal EnableDelayedExpansion
set dir_list=ready.txt
set dest_folder=d:\small\final\ok\
if "%dest_folder:~-1%"=="\" set dest_folder=%dest_folder:~0,-1%
for /f "delims=" %%a in (%dir_list%) do (
set dir1=%%a
if "!dir1:~-1!"=="\" set dir1=!dir1:~0,-1!
for %%f in (!dir1!) do set dir2=%%~nxf
robocopy "!dir1!" "%dest_folder%\!dir2!" /MOVE /E
)
Обратите внимание, что robocopy
может копировать и перемещать только целые каталоги, а не отдельные файлы. Таким образом, ваш ready.txt
должен состоять только из каталогов. Трейлинг \
позаботился и может быть смешанным.
Robocopy
требуется полное имя каталога для нового каталога, поэтому нам нужно
for %%f
-line (чтобы получить последнюю часть каталога в каталоге источника.) Так нужно
robocopy c:\sub\meme d:\sub\meme
. Вы не можете сделать robocopy c:\sub\meme d:\sub
.
Вы можете проверить это пакетный файл, поместив echo
перед robocopy
-файла
(и до move
в предыдущем примере).