So löschen Sie leere Ordner aus einem bestimmten Verzeichnis in Windows mit einem Skript

Ich verwende r. js als Build-Tool, aber ab heute gibt mir dieses Tool nicht die Möglichkeit, leere Ordner im Build-Verzeichnis zu löschen. Ich habe diese beiden Skripte gefunden

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

Wenn ich mich im Netz umsehe, bekomme ich immer

%%i was unexpected at this time.

Oder

%%d was unexpected at this time.

Und ich würde nicht wissen, wie ich dem Skript sagen soll, wo sich mein Verzeichnis befindet.

Mein build-Skript ist

@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

Ich muss das Skript anweisen, alle leeren Verzeichnisse zu entfernen, die sich darin befinden ../../js

Author: Der Hochstapler, 2012-07-03

2 answers

Aus einem Grund, den ich nie vollständig verstanden habe, verwendet for eine andere Syntax innerhalb und außerhalb von Batchdateien.

Dieser Befehl sollte in einer Batchdatei funktionieren

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

In der Eingabeaufforderung (keine Batchdatei) müssen Sie %%i durch %i ersetzen:

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

Um die Fehlermeldungen The directory is not empty. zu unterdrücken, verwenden Sie rd "%i" 2>NUL.

Ein einfaches rd "%i">NUL leitet die Ausgabe um (stdout), nicht die Fehlermeldungen (stderr).

 4
Author: Dennis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-07-03 20:25:29

Beachten Sie, dass das erste Skript, dh das folgende, NICHT für Verzeichnisse mit Leerzeichen funktioniert.

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

Die richtige version sollte hier sein. Beachten Sie, dass die Verwendung der Standardbereiche und Registerkarten als Trennzeichen deaktiviert sein muss.

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

Und bitte beachten Sie Dennis ' Antwort (die akzeptierte) für die Verwendung des Skripts an der Eingabeaufforderung.

 0
Author: lwchkg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-07-06 03:23:58