FOR Schleife mit Unterverzeichnissen, die Ausgabe kürzen (tokens evtl.)
Hallo, ich hätte mal eine Frage, eine FOR Schleife treibt mich in den Wahnsinn. Es geht um folgendes:
Mein Verzeichnisbaum sieht so aus C:\!TEST!\TEST2\TEST3\TEST.TXT
Verzeichnisbaum 2 = C:\!TEST!\TEST.EXE
Ausführendes BAT Verzeichnis: C:\!TEST!
Nun die Schleife:
Was wird gemacht ?
Das ganze Verzeichnis C:\!TEST! und Unterordner wird nach TXT Dateien durchsucht, er findet eine im Verzeichnis C:\!TEST!\TEST2\TEST3. Die Ausgabe %%I ist nun:
C:\!TEST!\TEST2\TEST3\TEST.TXT
Also mein Befehl in der Schleife wäre nun:
TEST.EXE -v -d "C:\!TEST!\TEST2\TEST3\TEST.TXT" >"C:\!TEST!\TEST2\TEST3\TEST.lic"
Mein Problem ist, das Tool TEST.EXE kommt mit "!" im Verzeichnisbaum nicht klar ! Meine Befehlszeile MUSS so aussehen:
TEST.EXE -v -d "TEST2\TEST3\TEST.TXT" >"C:\!TEST!\TEST2\TEST3\TEST.lic"
Ich muss also die Ausgabe %%I kürzen und zwar das Laufwerk muss weg und das Ausführende Verzeichnis, ich brauche nur die Namen der Unterordner !
Aus "C:\!TEST!\TEST2\TEST3\TEST.TXT" muss "TEST2\TEST3\TEST.TXT" werden.
Leider geht %%~dI auch nicht, dann ist zwar Laufwerk weg aber immer noch der ganze Baum. Ich bräuchte da eine Lösung wie ich alles vor den Unterverzeichnissen "wegschneiden" kann.
Falls es hilfreich ist, im ausführenden BAT Verzeichnis wird sich nie eine TXT Datei befinden, daher brauche ich nur die Unterordner des ausführenden Verzeichnisses !
Mein Verzeichnisbaum sieht so aus C:\!TEST!\TEST2\TEST3\TEST.TXT
Verzeichnisbaum 2 = C:\!TEST!\TEST.EXE
Ausführendes BAT Verzeichnis: C:\!TEST!
Nun die Schleife:
FOR /F "delims=*" %%I IN ('dir /b /s *.TXT') do TEST.EXE -v -d "%%I" >"%%~dpnI.lic"
Was wird gemacht ?
Das ganze Verzeichnis C:\!TEST! und Unterordner wird nach TXT Dateien durchsucht, er findet eine im Verzeichnis C:\!TEST!\TEST2\TEST3. Die Ausgabe %%I ist nun:
C:\!TEST!\TEST2\TEST3\TEST.TXT
Also mein Befehl in der Schleife wäre nun:
TEST.EXE -v -d "C:\!TEST!\TEST2\TEST3\TEST.TXT" >"C:\!TEST!\TEST2\TEST3\TEST.lic"
Mein Problem ist, das Tool TEST.EXE kommt mit "!" im Verzeichnisbaum nicht klar ! Meine Befehlszeile MUSS so aussehen:
TEST.EXE -v -d "TEST2\TEST3\TEST.TXT" >"C:\!TEST!\TEST2\TEST3\TEST.lic"
Ich muss also die Ausgabe %%I kürzen und zwar das Laufwerk muss weg und das Ausführende Verzeichnis, ich brauche nur die Namen der Unterordner !
Aus "C:\!TEST!\TEST2\TEST3\TEST.TXT" muss "TEST2\TEST3\TEST.TXT" werden.
Leider geht %%~dI auch nicht, dann ist zwar Laufwerk weg aber immer noch der ganze Baum. Ich bräuchte da eine Lösung wie ich alles vor den Unterverzeichnissen "wegschneiden" kann.
Falls es hilfreich ist, im ausführenden BAT Verzeichnis wird sich nie eine TXT Datei befinden, daher brauche ich nur die Unterordner des ausführenden Verzeichnisses !
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 325317
Url: https://administrator.de/contentid/325317
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
5 Kommentare
Neuester Kommentar
@echo off & setlocal ENABLEDELAYEDEXPANSION
FOR /F "delims=*" %%I IN ('dir /b /s /A-D *.TXT') do (
set "pfad=%%~pI"
set "pfad=!pfad:~2!"
TEST.EXE -v -d "!pfad!" >"%%~dI\!pfad!%%~nI.lic"
)
edit: Korrektur.
Zitat von @Kriegstreiber:
Vielen Dank erstmal . Die Idee ist ja sehr gut, allerdings funktioniert es nicht. Er löst mir !pfad! nicht auf, trotz ENABLEDELAYEDEXPANSION . Versuche das aber mal mit "%" auf normalen Wege. Dann hab ich ein paar Fragen dazu:
Was bewirkt /A-D in der Schleife ? Habe das schon öfters gesehen.
Ein dir /? sagts dir => es listet keine Ordner. Bei dir würde es z.B. auch Ordner mit einem Namen wie ORDNER.TXT übernehmen was bestimmt nicht gewünscht ist Vielen Dank erstmal . Die Idee ist ja sehr gut, allerdings funktioniert es nicht. Er löst mir !pfad! nicht auf, trotz ENABLEDELAYEDEXPANSION . Versuche das aber mal mit "%" auf normalen Wege. Dann hab ich ein paar Fragen dazu:
Was bewirkt /A-D in der Schleife ? Habe das schon öfters gesehen.
Was bewirkt set "pfad=!pfad:~2!" ? Schneidet er irgenetwas ab ?
Ja die ersten beiden Zeichen.Denn das !TEST! wird ja zu einem leeren String durh das DelayedExpansion aufgelöst, aus
C:\!TEST!\TEST2\TEST3\DATEI.TXT
wird dann
C:\\TEST2\TEST3\DATEI.TXT
Da ich hier nur set "pfad=%%~pI" verwende fällt ja der Laufwerksbuchstabe weg also sieht es dann so aus:
\\TEST2\TEST3\DATEI.TXT
mit set "pfad=!pfad:~2!" entferne ich die zwei führenden Backslashes zum finalen String:
TEST2\TEST3\DATEI.TXT
EDIT:
Das kann leider nicht funktionieren , denn mit ~2 schneidet er die ersten beiden Zeichen nur ab.
Doch Erklärung s.o. Geht hier problemlos.Das kann leider nicht funktionieren , denn mit ~2 schneidet er die ersten beiden Zeichen nur ab.
Gruß
Ich habe mich nach deiner Beschreibung
http://www.dostips.com/DtTipsStringManipulation.php#Snippets.Replace
zum Ersetzen von Strings durchlesen
Mein Verzeichnisbaum sieht so aus C:\!TEST!\TEST2\TEST3\TEST.TXT
gerichtet und damit funktioniert es.Kann ich irgendwie mit token ab IMMERDA abschneiden, das das Ergebnis: IMMERDA\TEST\TXT wäre ?
Du solltest dir malhttp://www.dostips.com/DtTipsStringManipulation.php#Snippets.Replace
zum Ersetzen von Strings durchlesen