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 !
Please also mark the comments that contributed to the solution of the article
Content-Key: 325317
Url: https://administrator.de/contentid/325317
Printed on: May 11, 2024 at 03:05 o'clock
5 Comments
Latest comment
@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