Como criar um arquivo em lotes que exclui todas as pastas denominadas `bin` ou` obj` recursivamente?

31

Eu tenho a necessidade de apagar tudo bine objpastas em uma pasta no meu PC. Então, estou pensando em um arquivo em lotes para fazer isso, mas não sou familiar com arquivos em lotes no Windows. Por favor ajude.

[Editar]

Após discussão com o usuário DMA57361, cheguei à solução atual (ainda tendo problemas, veja nossos comentários):

Crie um arquivo .bat e cole o comando abaixo:

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"

OU

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

@ DMA57361: Quando executo seu script, recebo o erro abaixo. Qualquer ideia?

texto alternativo

Nam G VU
fonte
@ Nam - por que você está correndo for \/d \/r ...- por que as barras duplas em vez de for /d /r ...? E rodar a versão "completa" com /qno final - como afirmo - exclui tudo sem aviso, portanto não retorna saída (ou seja, não informa quando funciona, apenas quando há um erro), você tem certeza de que o segundo executar acima não funcionou corretamente?
DMA57361
@Nam esta execução também não é a mesma - na imagem com a qual seu comando começa for / %d in e não for /d /r . %d in- você precisa usar o comando inteiro abaixo, cada bit tem uma função diferente e é importante.
precisa saber é o seguinte
@ Nam Opps, minhas desculpas, você está totalmente certo, ele não imprime os primeiros interruptores! No entanto, ele não gera esse erro e parece funcionar corretamente, para mim. Você já tentou simplesmente executar o comando na linha de comando, em vez de tentar executá-lo em um arquivo em lotes?
DMA57361
Hmm, que estranho. Possivelmente o seu Win7 está fazendo algo diferente com o lote em comparação com o meu WinXP, então, não sei ao certo o que.
Poderei
Na verdade, tente prefixar o comando batch starte veja o que acontece. Não é o ideal, mas me pergunto se isso pode ajudar.
precisa saber é o seguinte

Respostas:

42

Isso já foi respondido anteriormente no Stack Overflow, que é de onde tirei o principal impulso dessa resposta.

Experimente o seguinte comando, você pode executá-lo de dentro cmd:

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s/q "%d"

Se você precisar que outras pastas sejam alteradas, basta adicionar novos itens ao (bin,obj)conjunto no meio do comando.

Isso excluirá tudo o que corresponder sem aviso e sem usar a lixeira - portanto, se você quiser um pouco de segurança extra, abandone /qa ligação da chamada para rdno final e o sistema deverá perguntar antes de cada exclusão.

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s "%d"

Se você pretende executar o comando a partir de um arquivo de lote , você terá que substituir todas as ocorrências da variável %dcom %%d, assim:

for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
OR
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

De acordo com a conversão teve na pergunta comentários

Se o comando se recusar a executar em um arquivo em lotes (não é possível replicar aqui), tente prefixar o comando com start. Embora isso inicie o processo para ser executado simultaneamente com o arquivo em lotes, o que pode causar outros problemas, parece mais provável que funcione corretamente.

Além disso, se você tiver arquivos nomeados objou binna árvore de pastas em que o comando está trabalhando, você receberá uma mensagem de erro para cada arquivo encontrado com um nome correspondente. Esses arquivos correspondentes não são excluídos e não devem atrapalhar o comando que exclui o que deveria. Em outras palavras, eles podem ser ignorados com segurança.

DMA57361
fonte
11
Talvez você saiba como posso ignorar uma pasta dentro dessa pasta raiz onde estou executando este comando?
Goran Obradovic
Funcionou perfeitamente! THX! +1
khr055
1

Esses comandos devem funcionar no cmd.

del * .obj

del * .bin

arun babu
fonte
0

Apenas faça

del /s /p bin
del /s /p obj
MikeSchem
fonte