Variable in For Schleife bei Batch benutzen
Hallo,
habe eine Batch mir For schleife.
For %%f IN (*.XML) do (
bla bla bla
bla bla bla
bla bla bla
SET FILE=%%f
)
möchte in jedem einzelnen vorgang file benutzen.
FILE ist aber leer.
Wie krieg es hin dass die Batches in der Schleife %%f nicht vergisst?
habe eine Batch mir For schleife.
For %%f IN (*.XML) do (
bla bla bla
bla bla bla
bla bla bla
SET FILE=%%f
)
möchte in jedem einzelnen vorgang file benutzen.
FILE ist aber leer.
Wie krieg es hin dass die Batches in der Schleife %%f nicht vergisst?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 161447
Url: https://administrator.de/contentid/161447
Ausgedruckt am: 25.11.2024 um 02:11 Uhr
13 Kommentare
Neuester Kommentar
Hallo KarlAlexander,
versuch es mal anstatt mit:
mit
FOR %%f IN (*XML) do (
bla bla bla
bla bla bla
bla bla bla
call :FILESET %%f
)
:FILESET
set FILE = %1
Auch wenn ich mir sicher bin, dass es bessere Lösungen gibt und ich nicht genau weiß, ob meine Denkweise richtig ist.
Wahrscheinlich krieg ich gleich von bastla o.ä. eins übergebraten. ^^
Ich versuch nur zu helfen und zu lernen :-P
Grüße,
LF
versuch es mal anstatt mit:
For %%f IN (*.XML) do (
bla bla bla
bla bla bla
bla bla bla
SET FILE=%%f
)
bla bla bla
bla bla bla
bla bla bla
SET FILE=%%f
)
mit
FOR %%f IN (*XML) do (
bla bla bla
bla bla bla
bla bla bla
call :FILESET %%f
)
:FILESET
set FILE = %1
Auch wenn ich mir sicher bin, dass es bessere Lösungen gibt und ich nicht genau weiß, ob meine Denkweise richtig ist.
Wahrscheinlich krieg ich gleich von bastla o.ä. eins übergebraten. ^^
Ich versuch nur zu helfen und zu lernen :-P
Grüße,
LF
Hallo LittleFlame,
Dein Ansatz ist schon richtig. Falls in dem
schon %FILE% benutzt werden soll, muss das alles aber in das Unterprogramm
Außerdem würde ich schreiben:
Das verhindert, dass Dateinamen, die Leerzeichen enthalten, zerhackt und statt als EIN Parameter als MEHRERE Parameter übergeben werden.
und
Die Tilde entfernt die umgebenden Anführungszeichen von %1. Die Anführungszeichen um FILE=%~1 verhindern, dass sich aus versehen ein Leer- oder Tabzeichen an den Dateinamen in %1 "pappt".
@karlalexander1990
Schau Dir mal mein Tutorial zur FOR-Schleife an, besonders das Kapitel "Exkurs (verzögerte) Variablenerweiterung" und die "Praxistipps". ACHTUNG! Mitdenken und selbst Testprogramme entwickeln und ausprobieren ist gefragt!
Gruß
Friemler
Dein Ansatz ist schon richtig. Falls in dem
bla bla bla
bla bla bla
bla bla bla
FILESET
.Außerdem würde ich schreiben:
call :FILESET "%%f"
und
set "FILE=%~1"
@karlalexander1990
Schau Dir mal mein Tutorial zur FOR-Schleife an, besonders das Kapitel "Exkurs (verzögerte) Variablenerweiterung" und die "Praxistipps". ACHTUNG! Mitdenken und selbst Testprogramme entwickeln und ausprobieren ist gefragt!
Gruß
Friemler
Hallo LittleFlame,
jepp, richtig. Aber auch an das
bzw.
am Ende des Unterprogramms denken . Von wegen
Zum formatieren von Codezeilen:
In der Eingabebox für Kommentare gibt es oben einen in ROT hervorgehobenen Link auf die Formatierungshilfe. Oder Du klickst unter meinem Beitrag auf
Gruß
Friemler
jepp, richtig. Aber auch an das
exit /b
goto :eof
Back to Caller
.Zum formatieren von Codezeilen:
In der Eingabebox für Kommentare gibt es oben einen in ROT hervorgehobenen Link auf die Formatierungshilfe. Oder Du klickst unter meinem Beitrag auf
"Mit Zitat"
und schaust Dir an, was ich so getippselt habe.Gruß
Friemler
Hallo KarlAlexander1990!
Eigentlich sollte das so aussehen:
wobei Du die Zeilen 2 bis 4 auch zu
zusammenfassen kannst.
Grüße
bastla
Eigentlich sollte das so aussehen:
setlocal
FOR %%f IN (*.XML) do (
call :FILESET "%%f"
)
goto :eof
:FILESET
set "FILE=%~1"
bla bla bla
bla bla bla
bla bla bla
goto :eof
FOR %%f IN (*.XML) do call :FILESET "%%f"
Grüße
bastla
Hallo KarlAlexander1990,
Du hast mein Tutorial zur FOR-Schleife noch nicht gelesen.
Alles, was Du mit der Variablen %FILE% machen willst, muss in ein Unterprogramm, oder Du aktivierst und benutzt die verzögerte Variablenerweiterung. Das ist bei Dateinamen aber gefährlich, da sie ein Ausrufezeichen enthalten könnten, was auch als Steuerzeichen zur Kenntlichmachung von verzögert zu erweiternden Variablen dient => es kommt zu Fehlern.
Gruß
Friemler
Du hast mein Tutorial zur FOR-Schleife noch nicht gelesen.
Alles, was Du mit der Variablen %FILE% machen willst, muss in ein Unterprogramm, oder Du aktivierst und benutzt die verzögerte Variablenerweiterung. Das ist bei Dateinamen aber gefährlich, da sie ein Ausrufezeichen enthalten könnten, was auch als Steuerzeichen zur Kenntlichmachung von verzögert zu erweiternden Variablen dient => es kommt zu Fehlern.
Gruß
Friemler
Das ist bei Dateinamen aber gefährlich, da sie ein Ausrufezeichen enthalten könnten, was auch als Steuerzeichen zur Kenntlichmachung von verzögert zu erweiternden Variablen dient => es kommt zu Fehlern.
... wobei es zur Not auch so ginge:setlocal disabledelayedexpansion
for %%f in (*.XML) do (
set "FILE=%%f"
setlocal enabledelayedexpansion
echo !FILE!
type "!FILE!"
echo bla bla bla
endlocal
)
bastla
[OT] Moin Friemler
Na ja...
Soll ich mal zum Vergleich ein Foto meiner Ex-Schwiegermutti hochladen?
Da wären auch einige Details nur ganz verzögert zu erweitern...
Grüße
Biber
[/OT]
Na ja...
Soll ich mal zum Vergleich ein Foto meiner Ex-Schwiegermutti hochladen?
Da wären auch einige Details nur ganz verzögert zu erweitern...
Grüße
Biber
[/OT]