Desejo excluir uma pasta chamada "NEW", mas somente se essa pasta estiver vazia.
Aqui está o que eu tentei:
if exist "NEW\*" goto finished
if not exist "NEW\*" goto remove_new
:remove_new
rd /s /q "NEW\"
goto finished
:finished
exit
O que foi dito acima parece estar levando em consideração que a pasta NOVA existe, então não a está excluindo?
Por padrão, rd apenas removerá pastas que não estiverem vazias. Uma pasta também pode ser considerada não vazia se tiver subpastas.
Ao sugerir /s, você diz: remova todos os arquivos e pastas dentro da pasta e exclua esta pasta.
Se você simplesmente fizer:
Ele tentará remover a nova pasta. Se encontrar arquivos e/ou pastas, exibirá a mensagem
The folder is not empty.
O /q não removerá essa mensagem. Para tentar remover silenciosamente a pasta, mas não exibir o erro, use o seguinte comando:
Este comando diz: tente excluir silenciosamente a pasta. Quaisquer erros exibidos na tela devem ser eliminados (ou seja, não mostrados).
Se você excluir apenas pastas vazias, em vez de todo o script, poderá simplesmente usar
rd
sem a/s
opção (e oq
). Então seu comando será:Isso apenas excluirá o diretório se ele existir E se estiver vazio. Caso contrário, retornará uma mensagem de erro.
PS. Os nomes das pastas não diferenciam maiúsculas de minúsculas
rd "new\"
.PPS. Embora não seja necessário neste caso,
""
é uma boa ideia caso você use pastas com espaços como"new 01"
.PPPS. Você também não precisa da barra invertida (
\
) no final do nome da pasta, poisrd
se aplica apenas a pastas. Mas ajuda a diferenciar entre arquivos e pastas com outros comandos. Por exemploexist "foldername\"
, aplicar-se-á a pastasexist "name"
, aplicar-se-á a ficheiros e/ou pastas.Seu comando
rd /q new
ourd new
funciona perfeitamente para excluir apenas uma pasta vazia .Para pastas contendo arquivos e/ou subpastas, este comando não funciona .
Obs.: 1 Para excluir uma pasta contendo subpasta/recursivamente, adicione
/s
:1. A pasta existe e está vazia :
2. A pasta contém arquivo ou subpastas ( vazio ou não):
3. A pasta contém arquivo ou subpastas ( vazio ou não):
4. Você não precisa usar
:label
para lidar com as ações de redirecionamento quandoif exist
retorna true/false , você pode ter essas ações em uma única linha ou bloco único, com exibição de mensagem mais precisa também:Obs.: 2 Teste a existência de uma pasta e evite confundi-la com um arquivo de mesmo nome (e sem extensão) usando "pasta".
Para o seu caso específico você pode usar:
Para excluir uma pasta e somente se estiver vazia e não tiver subpastas vazias
Algumas leituras adicionais:
[√] RMDir | RD
[√] Se outra condição..
[√] Execução Condicional
||
e&&
[√] Noções básicas sobre start, 2>nul, cmd e outros símbolos em um arquivo em lote