@echo off
setlocal EnableDelayedExpansion
rem Define working variables
set "dir=D:\Test\z"
set "exclude=/backup/resources/"
rem Change current dir to working dir
cd /D "%dir%"
rem Process all folders in this dir
for /D %%f in (*) do (
rem If current folder is not in "exclude" var
if "!exclude:/%%f/=!" equ "%exclude%" (
rem Delete it
ECHO rd /s /q "%%f"
)
)
Diese Methode verwenden interne cmd.exe nur Befehle, so dass es schneller als andere Methoden ausführen, die extern verwenden .exe Dateien (wie findstr.exe
).
Die Art und Weise zu erkennen, ob ein Name in den Variablen auszuschließen versucht, von ihm solchen Namen zu löschen: "%exclude:/%%f/=%"
: wenn das Ergebnis auf die ursprünglichen Variableninhalte gleich ist, wird der Ordner nicht da war. Diese Methode ist sehr einfach und effizient und funktioniert nicht von Fall zu Fall, so dass es keinen /I
ignorieren Fallschalter im if
Befehl erfordert.
Die Namen sind durch Schrägstriche begrenzt, um Probleme durch teilweise Namensübereinstimmungen zu vermeiden. Aus diesem Grund ist der %%f
Teil in Schrägstrichen im if
Befehl enthalten.
Beachten Sie, dass der Wert %%f
in jeder Iteration des Befehls for
ändern. Aus diesem Grund ist die exclude
Variable von Ausrufezeichen statt Prozentzeichen umgeben und der setlocal EnableDelayedExpansion
Befehl wird zu Beginn gegeben; Andernfalls würde die% Erweiterung% nur einmal durchgeführt werden, bevor der for
Befehl Iterationen starten. Sie können in diesem Forum nach einer "verzögerten Erweiterung" suchen, um diesen Punkt näher zu erläutern.
Vielen Dank.Das hat gut funktioniert. Kannst du das Drehbuch im Detail erklären? –
Diese Methode hat zwei Probleme: Es erfordert genaue Übereinstimmung, um die Ordnernamen zu finden (das ist leicht zu lösen, indem '/ I' Groß- und Kleinschreibung im Befehl 'findstr' ignoriert) und auch Ordner, die teilweise mit einem beliebigen Namen übereinstimmen die Ausschlussliste. Zum Beispiel würde es auch "backup1", "backupA", "backupETC" Ordner ausschließen. – Aacini