Cómo eliminar carpetas vacías de un directorio determinado en Windows con un script

Cómo eliminar carpetas vacías de un directorio determinado en Windows con un script

Estoy usandor.jscomo herramienta de compilación, pero a partir de hoy esas herramientas no me permiten eliminar carpetas vacías en el directorio de compilación. He encontrado estos dos 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

Mirando alrededor de la red pero siempre obtengo

%%i was unexpected at this time.

o

%%d was unexpected at this time.

Y no sabría cómo decirle al script dónde está mi directorio.

Mi script de compilación es

@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

Necesito decirle al script que elimine todos los directorios vacíos que se encuentran dentro../../js

Respuesta1

Por razones que nunca entendí completamente, forutiliza una sintaxis diferente dentro y fuera de los archivos por lotes.

Este comando debería funcionar dentro de un archivo por lotes

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

En el símbolo del sistema (sin archivo por lotes), debe sustituirlo %%ipor %i:

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

Además, para suprimir los The directory is not empty.mensajes de error, utilice rd "%i" 2>NUL.

Un simple rd "%i">NULredirige la salida (salida estándar), no los mensajes de error (stderr).

Respuesta2

Tenga en cuenta que el primer script, es decir, el siguiente,NO funciona en directorios con espacios.

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

La versión correcta debería estar aquí. Tenga en cuenta que el uso de espacios y tabulaciones predeterminados como delimitadores DEBE estar deshabilitado.

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

Y consulte la respuesta de Dennis (la aceptada) para usar el script en el símbolo del sistema.

información relacionada