Usando curingas com o comando rmdir ou rd

27

Digamos que haja alguma pasta na unidade D: :

D:\Air
D:\Abonden
D:\All
D:\Whatever

Eu quero excluir todas as pastas que começam com "A" (incluindo todas as subpastas e arquivos). Eu tentei este comando:

rmdir D:\A* /s /q

Recebo um erro: (

The filename, directory name, or volume label syntax is incorrect.

O comando del funciona com * , mas também preciso excluir pastas.
Existe uma maneira de conseguir isso através do comando rmdir ?

    
por serdar 06.06.2014 / 09:44

4 respostas

27

cd c:\temp
for /f %i in ('dir /a:d /s /b A*') do rd /s /q %i

Use isso para testar:

for /f %i in ('dir /a:d /s /b A*') do echo rd /s /q %i

Isso canalizará os comandos a serem executados no prompt de comando e permitirá que você veja o que está acontecendo.

Tenha em mente que isso também pesquisará subpastas como "C: \ temp \ jjj \ aaa" e excluirá a pasta aaa. Se você quiser apenas olhar para as pastas de nível superior "C: \ temp \ aaa", remova o "/s" do comando.

A chave para isso é o A *, onde você colocaria sua string de pesquisa. Isso aceitará caracteres curinga, como aaa* , aaa* e *aaa* , se você desejar.

    
por 06.06.2014 / 10:08
18

Excluindo pastas usando curingas

O comando rmdir / rd não suporta caracteres curinga (ou seja, * e ? ). Você pode solucionar essa limitação agrupando-a em um loop for .

Exemplo de uso

for /d %G in ("X:\A*") do rd /s /q "%~G"

Observação Ao excluir arquivos e pastas, convém substituir o comando rd por echo primeiro. Dessa forma, você pode garantir que qualquer coisa que não deva ser excluída seria realmente.

Vários padrões

Para excluir várias pastas que correspondem a padrões diferentes, a sintaxe não é muito diferente. Como @dbenham apontou corretamente, um comando de uma linha é suficiente. Você também pode especificar caminhos diferentes:

for /d %G in ("X:\A*","Y:\Whatever\B*","Z:\C?D") do rd /s /q "%~G"

Bônus - Verificando a existência da pasta

Caso você queira verificar se existem pastas específicas, use o seguinte comando:

dir /b /a:d "X:\A*" >nul 2>&1 && echo Folders exist. || echo No folders found.

Leitura adicional

por 06.06.2014 / 10:21
14

Como é que ninguém disse ao OP sobre os arquivos ainda?!

forfiles /P D:\ /M A* /C "cmd /c if @isdir==TRUE rmdir /s /q @file"

/P is pathname - where the searching starts
/M is search mask, looking for files that start with A
/C is the command to execute
/S is recursive subfolders (didn't include here, because op didn't ask)
    
por 06.11.2015 / 04:34
6

adn31415 resposta está correta, mas quebra se você colocar isso em um script em lotes ou cmd. Eu bati minha cabeça por horas até que descobri que é assim que você a usa.

Na janela de comando do DOS:

for /d %G in ("X:\A*") do rd /s /q "%~G"

No script em lote ou cmd:

for /d %%G in ("X:\A*") do rd /s /q "%%~G"

Se você quiser colocá-lo em um arquivo ".bat" ou ".cmd", precisará duplicar os caracteres "%".

    
por 08.10.2015 / 23:09