Bat: executa um comando em várias pastas

2

Eu tenho uma pasta de projetos com um grande número de projetos dentro. Existe uma maneira que eu possa criar um arquivo bat que entra em cada uma dessas pastas do projeto e executa alguns comandos?

O que eu gostaria é de automatizar o que eu faria agora manualmente:

> cd dir1
> command1 arg1 arg2
> command2 arg1 arg2
> cd ..
> cd dir2
> ...

É possível automatizar com um arquivo bat?

    
por Svish 29.04.2011 / 09:42

4 respostas

1

Tentamos usar o que eu encontrei no tópico do fórum . Parece funcionar?

pushd C:\projects
for /f "Delims=" %%i in ('dir /ad /b') do (
    cd "%%i"
    command1 arg1 arg2
    command2 arg1 arg2
    cd ..
)
popd

Não tenho certeza se obtenho a parte /f "Delims= , por exemplo, embora ... Eu também gostaria de excluir alguns diretórios. Por favor, comente se você sabe como:)

    
por 29.04.2011 / 10:27
0

Você pode usar todos os comandos da linha de comando no arquivo BAT, por isso não sei qual é a sua pergunta.

Basta escrever um arquivo BAT assim:

cd dir1
command1 arg1 arg2
command2 arg1 arg2
cd ..
cd dir2

Se você tiver muitos diretórios e os comandos forem sempre os mesmos, coloque-os em um segundo script BAT e use um for loop:

for %%a IN ('dir /b %PROJECT_FOLDER%') do call second_script.bat %%a

Verifique a ajuda de dir se você tiver arquivos e diretórios em %PROJECT_FOLDER% . Deve haver uma opção para listar apenas diretórios.

    
por 29.04.2011 / 10:18
0
pushd C:\projects
:: your 'for /f' was correct, but unnecessary
for /d %%i in (*) do call :foo "%%~i"
popd
goto :eof

:foo
    if "%~1"=="junk" goto :eof
    if "%~1"=="unneeded directory" goto :eof

    pushd "%~1"
    command1
    command2
    popd
    goto :eof

Como alternativa, se você quiser incluir apenas alguns diretórios específicos:

for /d %%i in (a b c) do ...
    
por 29.04.2011 / 14:21
0

Se você estiver disposto a experimentar linhas de comando alternativas, o TakeCommand (TCMD / TCC) da JPSoft tem um sistema interno para fazer isso desde a década de 1980, quando era NDOS.

Eu poderia fazer del / s * .bak para matar todos os arquivos bak, mas isso fará uma tentativa em todas as pastas e falhará se nenhum arquivo bak estiver presente.

Digite global .

global se existir * .bak del * .bak

Muito mais rápido. Passa por todas as pastas e só emite a exclusão se os arquivos bak existirem.

Para administração pessoal, eu me dou muito melhor com a linha de comando aprimorada do JPSoft. E eu tenho usado desde a década de 1980 - eu não acho que eles estão indo a lugar nenhum.

    
por 19.08.2015 / 20:36