Windows .BAT для перемещения всех каталогов, соответствующих маске, из каталога A в каталог B - PullRequest
2 голосов
/ 01 октября 2009

Я хочу написать файл .BAT, чтобы переместить все подкаталоги (имя которых соответствует маске) ​​из C: \ WINNT \ Temp в H: \ SOMEOTHERPLACE.

Так что, если моя маска ABC *, то каталоги:

C:\WINNT\Temp\ABC1
C:\WINNT\Temp\ABC2
C:\WINNT\Temp\ABC3

следует переместить на

H:\SOMEOTHERPLACE 

и все остальное (включая файлы, в отличие от каталогов, которые соответствуют маске) ​​не должны. Я хочу переместить их, а не копировать.

Кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

8 голосов
/ 01 октября 2009

ОК, я понял это. Если вы пишете файл moveirs.bat, содержащий одну строку

for /d %%X in (%1) do move %%X %2\%%~nX 

И затем запустите его (с аргументом 1, являющимся маской для каталогов, которые я хочу переместить, и аргументом 2, являющимся каталогом, в который я хочу переместить каталоги), как

C:\>movedirs.bat C:\WINNT\Temp\ABC* H:\SOMEOTHERPLACE\

Создает эффект, который я хочу.

Аргумент / d в 'for' обеспечивает обработку только каталогов. Модификатор '~ n' в переменной %% X означает, что исходное имя подкаталога (в отличие от полного пути) используется в качестве цели во втором аргументе командной строки.

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

for /d %%X in (%1) do xcopy %%X %2\%%~nX /E /I

Для обработки каталогов как с расширениями, так и без них, например, для указанной выше команды "C: \ MyDir * .MyExt" потребуется комбинированный модификатор (имя файла + расширение) "~ nx":

for /d %%W in (%1) do xcopy %%W %2\%%~nxW /E /F /R /Y /I
0 голосов
/ 01 октября 2009

[Комментарии бесполезны для структурированных ответов, поэтому я повторю комментарий здесь - с парой правок!]

Спасибо за ваш ответ, но я обнаружил, что вы не можете использовать xcopy с подстановочным знаком в источнике. Вернее, вы можете использовать подстановочные знаки, но тогда вы получите только каталоги, созданные без какого-либо содержимого. Так что, если вы сделаете это ...

H:\SOMEOTHERPLACE>xcopy C:\WINNT\Temp\ABC1 /E

... вы получите каталог ABC1, скопированный в ваш текущий каталог, как и следовало ожидать, но если вы сделаете это ...

H:\SOMEOTHERPLACE>xcopy C:\WINNT\Temp\ABC* /E

... вы получите каждое имя каталога в C: \ WINNT \ Temp, которое появится в вашем текущем каталоге, но эти каталоги будут пустыми! Пожалуйста, скажите мне, что я неправ, но это то, что я нахожу!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...