Поскольку дубликаты невозможны, решение довольно простое; вам даже не нужен временный файл Folders.txt
:
for /F "delims=" %%F in ('dir /S /A:-D /B "D:\Old\Stuff\*.t"') do (
move "%%~dpF." "D:\New\Stuff\"
)
%%~dpF
возвращает родительский каталог каждого найденного *.t
файла с обратной косой чертой. Просто добавьте .
, что означает текущий каталог, чтобы завершающий \
больше не вызывал проблем с командой move
.
Не пытайтесь удалить завершающую обратную косую черту, потому что это может вызвать проблемы в некоторых особых ситуациях: предположим, что целевой каталог - D:\
, поэтому при удалении \
остается D:
, который отличается от D:\
(но D:\.
есть).
Даже если в определенном каталоге может быть более одного файла *.t
, код будет работать, хотя команда move
выдает ошибку для каждого дубликата, поскольку каталог уже был перемещен ранее. Простое добавление или добавление 2> nul
к командной строке move
скрыло эти (и другие) ошибки.