Как выполнить пакетную команду Windows рекурсивно? - PullRequest
9 голосов
/ 11 января 2010

Например, у вас есть команда переименования в пакетном файле, и вы хотите выполнить этот файл в текущем каталоге и во всех подкаталогах.

1 Ответ

16 голосов
/ 11 января 2010

Предположим, что ваша партия имеет имя типа myrename.cmd, тогда вы можете легко сделать следующее:

call myrename.cmd
for /r /d %%x in (*) do (
    pushd "%%x"
    call myrename.cmd
    popd
)

Первая строка будет запускать его для текущего каталога, цикл for будет рекурсивно итерировать (/r) по всем каталогам (/d) и выполнять часть в скобках. Что мы делаем внутри них, так это меняем каталог на тот, который мы в настоящее время перебираем с pushd - который обладает хорошим свойством, что вы можете отменить это изменение каталога с помощью popd - и затем запускаете команду, которая затем запустите в каталоге, в который мы только что переключились.

Предполагается, что партия находится где-то на пути. Если это не так и случается так, что лежит вышеупомянутый командный файл, тогда вы можете использовать

"%~dp0myrename.cmd"
...