Como excluir pastas vazias de um determinado diretório no windows com um script

3

Estou usando r.js como uma ferramenta de criação, mas a partir de hoje essas ferramentas não me oferecem a capacidade de excluir pastas vazias no diretório de criaçã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 em volta da net, mas sempre consigo

%%i was unexpected at this time.

ou

%%d was unexpected at this time.

E eu não sei 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

Eu preciso dizer ao script para remover todos os diretórios vazios que estão localizados dentro de ../../js

    
por Nicola Peluchetti 03.07.2012 / 18:53

2 respostas

4

Por uma razão que eu nunca entendi totalmente, for usa uma sintaxe diferente dentro e fora dos arquivos em lote.

Este comando deve funcionar dentro de um arquivo de lote

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

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

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

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

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

    
por 03.07.2012 / 19:02
0

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 dos espaços e guias padrão como delimitadores DEVE ser desativado.

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

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

    
por 06.07.2015 / 05:23