запустить команду в каждой подпапке - PullRequest
4 голосов
/ 13 июля 2009

Какой самый простой способ выполнить команду в каждой подпапке пути? В этом случае я должен запустить очистку SVN для каждого каталога в моем хранилище.

Ответы [ 3 ]

7 голосов
/ 13 июля 2009

for команда - это то, что вы ищете. Для того, чтобы прочитать о точном синтаксисе типа for /?

Например, чтобы напечатать имена всех подкаталогов в текущем каталоге. Вы можете использовать команду:

for /d /r %i in (*.*) do @echo %i

Эхо% i часть - это часть, которую вы должны изменить в соответствии со своим случаем.

3 голосов
/ 13 июля 2009

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

Но Ответ Can может работать в вашем случае, если только у SVN нет больших проблем. Хотя вам, вероятно, придется запускать его несколько раз, так как он будет начинаться с корневой папки, которая все равно будет иметь проблемы. В этом случае вам понадобится какой-то обход после заказа, который нельзя сделать с помощью for /r, но который может гарантировать, что вы начнете с самых низких каталогов в иерархии для очистки.

Вам также необходимо исключить каталоги хранения состояния SVN .svn:

for /r /d %i in (*) do if NOT %i==.svn svn cleanup %i

Что касается прохождения после заказа, вы можете создать небольшую партию:

@echo off
call :recurse "."
goto :eof

:recurse
pushd %1
if not %~1==.svn (
    for /d %%i in (*) do call :recurse "%%i"
    echo svn cleanup %~1
)
popd
goto :eof

На следующем дереве:

a
├───.svn
├───a1
│   └───.svn
└───a2
    └───.svn
b
├───.svn
├───b1
│   ├───.svn
│   ├───b11
│   │   └───.svn
│   └───b12
│       └───.svn
└───b2

Это дает следующий вывод:

svn cleanup "a1"
svn cleanup "a2"
svn cleanup "a"
svn cleanup "b11"
svn cleanup "b12"
svn cleanup "b1"
svn cleanup "b2"
svn cleanup "b"
svn cleanup "."

, который, как вы видите, гарантирует, что сначала обрабатываются самые низкие каталоги, а каталоги .svn пропускаются. Удалите echo, если вы хотите его использовать. Это может решить вашу проблему. Может быть.

1 голос
/ 13 июля 2009

svn cleanup автоматически возвращается в подкаталоги. Я не уверен, почему вам нужно выполнить рекурсию вручную для этой конкретной команды.

...