Пакетная команда Windows для перемещения всех папок в каталоге с исключениями

Я пытаюсь написать пакетный файл Windows, который позволит мне переместить все каталоги в заданном исходном каталоге в целевой каталог, который существует в этом исходном каталоге.

Очевидно, что моя команда перемещения должна применяться только к каталогам, а также исключать целевой каталог из обработки.

Возможно ли это с помощью пакетной команды Windows?


person William Owen    schedule 18.09.2011    source источник


Ответы (6)


Robocopy (присутствует в последних версиях Windows или загружается с сайта WRK), просто используйте переключатель /xd, чтобы исключить целевой каталог из копии;

robocopy c:\source\ c:\source\target\ *.* /E /XD c:\source\target\ /move
person Alex K.    schedule 18.09.2011
comment
Как насчет нескольких исключений или нескольких каталогов, которые нужно пропустить при перемещении? Улучшите свой ответ, добавив это тоже. - person Vicky Dev; 13.11.2017

Это не сработает — вы получите сообщение об ошибке, говорящее о том, что целевой каталог находится внутри исходного каталога или около того, даже если вы явно исключите целевой каталог. Что вы можете сделать, так это переместить каталоги во временное место, которое не находится под источником, а затем переместить их в цель.

Кстати, использование команды move не позволит вам указать папки для исключения. Для этого вы можете использовать xcopy, но учтите, что он будет копировать папки, а не перемещать их. Если это имеет значение, вы можете впоследствии удалить все, что захотите, просто убедитесь, что вы не удалили целевой каталог, который находится в исходном каталоге...

person eran    schedule 18.09.2011

Используя robocopy, входящий в состав Windows 7, я обнаружил, что параметр /XD не препятствует перемещению исходной папки.

Решение:

SET MoveDirSource=\\Server\Folder
SET MoveDirDestination=Z:\Folder
FOR /D %%i IN ("%MoveDirSource%\*") DO ROBOCOPY /MOVE /E "%%i" "%MoveDirDestination%\%%~nxi"

Это перебирает папки верхнего уровня и запускает robocopy для каждой.

person WhoIsRich    schedule 23.08.2012

NB: Упомянутый выше Robocopy с использованием флага /move скопирует файлы, а затем удалит их из исходной папки, а не переместит файлы. Это может иметь решающее значение при перемещении большого количества файлов из одного места в другое на одном и том же диске (поскольку перемещение выполняется практически мгновенно, а копирование — намного медленнее).

person Tony Woodhouse    schedule 16.11.2015

Это работает для меня:

move c:\fromDir\*.* c:\toDir\
person Oleg    schedule 29.08.2016
comment
по крайней мере, на winserver2012r2 это работает только для перемещения файлов, но не для подкаталогов - и не распространяется на какие-либо параметры для «исключений». - person quetzalcoatl; 02.12.2017

В пакете Windows:

FOR /d %%i IN (MySourceDirectory\*) DO move "%%i" MyTargetDirectory\%%~ni

Приведенная выше команда перемещает все каталоги, найденные в MySourceDirectory (/d), в MyTargetDirectory, используя исходное имя каталога (~ni). При перемещении Robocopy сначала выполняется копирование, а затем удаление, поэтому это происходит медленнее.

person River Rock    schedule 07.01.2020