Como deletar pastas vazias de um determinado diretório no Windows com um script

Como deletar pastas vazias de um determinado diretório no Windows com um script

estou a usarr.jscomo uma ferramenta de compilação, mas a partir de hoje essas ferramentas não me permitem excluir pastas vazias no diretório de compilação. Eu encontrei esses dois scripts

for /f "usebackq" %%d in ("dir /ad/b/s | sort /R") do rd "%%d"

for /f "delims=" %%i in ('dir /s /b /ad ^| sort /r') do rd "%%i">NUL

olhando ao redor da net, mas eu sempre consigo

%%i was unexpected at this time.

ou

%%d was unexpected at this time.

E eu não saberia como dizer ao script onde está meu diretório.

Meu script de construção é

@echo off
where /q r.js || (
    echo requirejs node package is not installed. You must install node, npm and then run npm install -g requirejs
    goto :eof
)
node r.js -o app.build.js
:end

Preciso dizer ao script para remover todos os diretórios vazios localizados dentro../../js

Responder1

Por motivos que nunca entendi completamente, forusa uma sintaxe diferente dentro e fora dos arquivos em lote.

Este comando deve funcionar dentro de um arquivo em lote

for /f "delims=" %%i in ('dir /s /b /ad ^| sort /r') do rd "%%i"

No prompt de comando (sem arquivo em lote), você deve substituir %%ipor %i:

for /f "delims=" %i in ('dir /s /b /ad ^| sort /r') do rd "%i"

Além disso, para suprimir as The directory is not empty.mensagens de erro, use rd "%i" 2>NUL.

Um simples rd "%i">NULredireciona a saída (saída padrão), não as mensagens de erro (stderr).

Responder2

Observe que o primeiro script, ou seja, o abaixo,NÃO funciona em diretórios com caracteres de espaço.

for /f "usebackq" %%d in ("dir /ad/b/s | sort /R") do rd "%%d"

A versão correta deve estar aqui. Observe que o uso de espaços e tabulações padrão como delimitadores DEVE ser desabilitado.

for /f "usebackqdelims=" %%d in ("dir /ad/b/s | sort /R") do rd "%%d"

E consulte a resposta de Dennis (a aceita) para usar o script no prompt de comando.

informação relacionada