Sie müssen ein bestimmtes Ergebnis aus einer Batch-For-Schleife ausschließen

Sie müssen ein bestimmtes Ergebnis aus einer Batch-For-Schleife ausschließen

Ich habe ein Skript, das mithilfe einer FOR-Schleife rekursiv Dateien aus einem bestimmten Verzeichnis (und Unterverzeichnissen) in einen Java-Klassenpfad lädt. Es sieht folgendermaßen aus:

FÜR /rVerzeichnis%%F IN (*.jar) Rufen Sie auf: addcp %%F

Leider muss ich jetzt ein bestimmtes Unterverzeichnis von den Ergebnissen ausschließen (ich möchte nicht, dass einige der JAR-Dateien geladen werden). Ich habe versucht, eine IF-Anweisung in die FOR-Schleife einzubetten, aber ohne Erfolg.

Das Ändern der Skriptsprachen ist leider keine Option und das Durchlaufen aller Unterverzeichnisse wäre ein Albtraum für die Wartung. Kennt jemand eine Möglichkeit, dies zu tun?

Ich habe so etwas versucht:

FÜR /rVerzeichnis%%F IN ( *.jar) DO IF %%F== *Zeichenfolge *DO-Aufruf :addcp %%F

aber es hat nicht funktioniert.

Antwort1

Hier ist ein Skript, das eine Liste der absoluten Pfade aller EXE-Dateien unter „%ProgramFiles%“ ausgibt, mit Ausnahme derer, die sich im Unterverzeichnis „Windows NT“ befinden. Ich denke, Sie könnten damit wahrscheinlich das finden, wonach Sie suchen.

@echo off

for /f "usebackq delims=" %%i in (`dir "%ProgramFiles%\*.exe" /s /a /b`) do call :checkit "%%i" 
goto end

:checkit
echo %1 | find /i "%ProgramFiles%\Windows NT\" >NUL 2>NUL
if errorlevel 1 echo %~1

:end

Antwort2

Ich würde find empfehlen, schau dir man find an. So etwas wie find "%ProgramFiles%\" -iname ".exe" ! -regex "%ProgramFiles%\Auszuschließender_Ordner.$" -exec call :addcp {} \; könnte das bewirken, was Sie wollen.

Antwort3

%%F wird in den Pfad zur .jar-Datei aufgelöst, nicht in den Verzeichnisnamen. Deshalb funktioniert das == nicht.

Ich schlage einen zweistufigen Prozess vor - zuerst

dir /s /b directory\*.jar > temp.txt

und dann

for /F usebackq %%I in (`findstr /V <excluded path> temp.txt`) do call :addcp %%I

Der Parameter /V für findstr druckt alle Zeilen, die nicht mit der von Ihnen übergebenen Zeichenfolge übereinstimmen. Sie sollten für Ihren Ausschluss auch Platzhalter oder sogar reguläre Ausdrücke verwenden können, wenn dies wirklich erforderlich ist.

verwandte Informationen