Mehrere Strings in FOR Schleife abarbeiten ohne eine Datei zu lesen
Hallo Kenner und Könner
ich möchte in einer FOR Schleife 8 verschiedene Strings (*.ext) unter der selben Variablen abarbeiten,
normalerweise würde man jetzt wohl zB eine "string.txt" erzeugen und Die dann zeilenweise auslesen
in etwa so
ich möchte das selbe Verhalten erreichen allerdings ohne eine Datei lesen zu müssen,
sondern die strings sollen in der Batch datei definiert werden
funktioniert leider nicht weil jede ext eine eigene Variable wird
Die Frage ist nun kommt man überhaupt ohne Hilfsdatei aus, wenn ja wie?
und schon mal danke fürs lesen
Gruß
RaidMan
ich möchte in einer FOR Schleife 8 verschiedene Strings (*.ext) unter der selben Variablen abarbeiten,
normalerweise würde man jetzt wohl zB eine "string.txt" erzeugen und Die dann zeilenweise auslesen
in etwa so
FOR /F "tokens=*" %%a IN (string.txt) do (
echo %%a
)
pause
ich möchte das selbe Verhalten erreichen allerdings ohne eine Datei lesen zu müssen,
sondern die strings sollen in der Batch datei definiert werden
FOR /F "tokens=1-5 delims=;" %%a IN ("*.ex1;*.ex2;*.ex3;*.ex4;*.ex5") do (
echo %%a
)
pause
Die Frage ist nun kommt man überhaupt ohne Hilfsdatei aus, wenn ja wie?
und schon mal danke fürs lesen
Gruß
RaidMan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 213362
Url: https://administrator.de/contentid/213362
Ausgedruckt am: 16.11.2024 um 11:11 Uhr
15 Kommentare
Neuester Kommentar
Hallo RaidMan!
Wenn es ohnehin um die Dateien geht, kannst Du ja gleich
verwenden ...
... oder, falls auch noch mehrere Pfade gefragt sind und verschachtelt werden soll, einfach nur die einzelnen Extensions in der Schleife angeben (ungetestet):
Grüße
bastla
[Edit] "Schachtel"-Variante hinzugefügt [/Edit]
Wenn es ohnehin um die Dateien geht, kannst Du ja gleich
for %%a in ("path\*.ext1" "path\*.ext2" "path\*.ext3") do (
echo Verarbeite "%%a"
)
... oder, falls auch noch mehrere Pfade gefragt sind und verschachtelt werden soll, einfach nur die einzelnen Extensions in der Schleife angeben (ungetestet):
for %%e in (ext1 ext2 ext3) do (
for %%f in ("path1\*.%%e" "path2\*.%%e" "path3\*.%%e") do (
echo Verarbeite "%%f"
)
)
bastla
[Edit] "Schachtel"-Variante hinzugefügt [/Edit]
das ist ein Zeilenumbruch (die zwei Leerzeilen danach müssen so bleiben, die gehören dazu). Dieser funktioniert nur im Zusammenhang mit "delayed expansion". Dieser trennt dann deine einzelnen Strings mit Zeilenumbrüchen
Weitere Erläuterungen zu Delayed Expansion findest du hier , das musste ich leider schon zu oft runterbeeten .
!NL!
voneinander.Weitere Erläuterungen zu Delayed Expansion findest du hier , das musste ich leider schon zu oft runterbeeten .
Hi,
wieso clever? Clever ist an dem NL-Trick imo nichts.
Warum in die Ferne schweifen und mit teils abenteuerlichen Lösungen aufwarten, die selten jemand versteht?
Unter Windows gibt es die Registry, die alle Werte für das Environment erzeugt und in der man eigene Variablen unterbringen kann, die dann nach dem Start des OS oder nach Änderung in den Einstellungen in der Systemsteuerung für das Environment sofort zur Verfügung stehen.
Allerdings muss vorher die Konsole geschlossen werden, da das alte Environment sonst bis zum erneuten Öffnen der Konsole noch gültig bleibt.
Für Spezialzeichen bietet sich der Typ REG_EXPAND_SZ geradezu an. Die in der Registry eingetragnen Variablen bleiben auch dauerhaft so lange erhalten, bis man sie wieder löscht.
Spezialzeichen_ins_Environment_eintragen.reg
REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
"NL"=hex(2):0d,0a,00
"CR"=hex(2):0d,00
"LF"=hex(2):0a,00
"TAB"=hex(2):09,00
"BS"=hex(2):20,08,08,00
"BELL"=hex(2):07,00
Nur für die nächsten 3 ist SETLOCAL ENABLEDELAYEDEXPANSION und das "!" erforderlich, die anderen funktionierten auch ohne die verzögerte Variablenverabeitung und mit "%".
CR = Wagenrücklauf, bleibt in der Zeile
LF = Zeilenvorschub
NL = Neue Zeile (CR+LF)
bS = Backspace/Rücktaste
TAB = TAbulator
BELL = Piepton, falls der Dienst "BEEP" und ein Lautsprecher aktiv sind
Und die TEST.CMD dazu zum Testen:
::Test für Spezialzeichen
@echo off & setlocal ENABLEDELAYEDEXPANSION
echo bla !LF!!LF!bla
echo bla !NL!!NL!blubber
echo bla !CR!blubb
@echo 1234567%BS%%BS%2
echo bla%TAB%bla%TAB%blubb
Pause
Gruß
Die Trennung durch Zeilenschaltungen ist schon ok und gut, meine Kritik bezog sich lediglich auf das Tricksen mit der Erzeugung der Zeilenschaltung.
Zitat von @RaidMan:
Hallo Kenner und Könner
ich möchte in einer FOR Schleife 8 verschiedene Strings (*.ext) unter der selben Variablen abarbeiten,
normalerweise würde man jetzt wohl zB eine "string.txt" erzeugen und Die dann zeilenweise auslesen
in etwa so
ich möchte das selbe Verhalten erreichen allerdings ohne eine Datei lesen zu müssen,
sondern die strings sollen in der Batch datei definiert werden
funktioniert leider nicht weil jede ext eine eigene Variable wird
Hallo Kenner und Könner
ich möchte in einer FOR Schleife 8 verschiedene Strings (*.ext) unter der selben Variablen abarbeiten,
normalerweise würde man jetzt wohl zB eine "string.txt" erzeugen und Die dann zeilenweise auslesen
in etwa so
> FOR /F "tokens=*" %%a IN (string.txt) do (
> echo %%a
> )
> pause
>
ich möchte das selbe Verhalten erreichen allerdings ohne eine Datei lesen zu müssen,
sondern die strings sollen in der Batch datei definiert werden
> FOR /F "tokens=1-5 delims=;" %%a IN ("*.ex1;*.ex2;*.ex3;*.ex4;*.ex5") do (
> echo %%a
> )
> pause
>
Kann es sein, daß du einfach nur sowas willst:
for %%i in (bli,bla,blu) do echo %%i
Zitat von @AlbertMinrich:
Kann es sein, daß du einfach nur sowas willst:
for %%i in (bli,bla,blu) do echo %%i
ja, genauso isses .Kann es sein, daß du einfach nur sowas willst:
for %%i in (bli,bla,blu) do echo %%i
Und wenn du statt Komma einen line break machst, erhälst du die oben von mir gepostete Schleife
lg.