Sichtbarkeit von batch Variablen
Hallo,
ich habe folgenden Befehl um Datum und Uhrzeit einer Datei zu ermitteln.Die Zeile 3 und 4 geben aber keinen Variableninhalt aus. Kann es sein, dass die in Zeile 1 genutzte Variable %%a außerhalb des for Befehles nicht mehr sichtbar/verfügbar sind?
Wo gibt es eine Info bezüglich der Sichtbarkeit von Variablen?
Danke
Wolfgang
ich habe folgenden Befehl um Datum und Uhrzeit einer Datei zu ermitteln.
for /f "tokens=1-2" %%a in ('dir /a-d /tc cloud.bat^|findstr /i /e "cloud.bat"') do echo Datum:%%a Zeit:%%b & set d=%%a
echo var aus for ist: %a%
echo var aus for ist: %%a
echo var d ist: %d%
Wo gibt es eine Info bezüglich der Sichtbarkeit von Variablen?
Danke
Wolfgang
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 298393
Url: https://administrator.de/contentid/298393
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
1 Kommentar
Hallo Wolfgang.
Die Schleifenvariablen sind immer nur im Kontext der Schleife gültig. Es ist bereits an der Schreibweise (im Batch zwei vorangestellte Prozentzeichen, dürfen nur aus einem Zeichen bestehen) erkennbar, dass es sich nicht um normale Umgebungsvariablen handelt. Mit SET kannst du sie einer Umgebungsvariablen zuweisen (hast du mit d getan).
Des weiteren gibt es dynamische Variablen, die wie Umgebungsvariablen aussehen, aber keine sind. Solche sind bspw. date, time, random, errorlevel, cmdcmdline ...
Wenn es dann um Umgebungsvariablen geht, dann gilt, dass sie an Kindprozesse vererbt werden. Soll heißen, wird ein neuer Prozess aus dem Batchscript gestartet, sind alle Umgebungsvariablen aus dem Batch Prozess (cmd.exe) auch im neuen Prozess abgreifbar. Umgekehrt geht das nicht. Änderungen der Umgebung im Kindprozess, sind im Elternprozess nicht sichtbar.
Ein durch CALL aufgerufenes weiteres Batchscript, läuft im selben Prozess wie das aufrufende Batchscript. Änderungen an Umgebungsvariablen sind also für beide Scripts gültig.
Mit SETLOCAL lässt sich eine Subumgebung starten, in der zunächst die Elternumgebung übernommen wird. Mit ENDLOCAL kann diese wieder beendet werden. Nach Aufruf von ENDLOCAL (oder Beenden des Scripts, wobei das ENDLOCAL implizit aufgerufen wird), liegen alle zwischenzeitlich getätigten Änderungen an der Umgebung out of scope. Die Umgebung, wie vor dem SETLOCAL Aufruf, ist wieder gültig.
Grüße
rubberman
Die Schleifenvariablen sind immer nur im Kontext der Schleife gültig. Es ist bereits an der Schreibweise (im Batch zwei vorangestellte Prozentzeichen, dürfen nur aus einem Zeichen bestehen) erkennbar, dass es sich nicht um normale Umgebungsvariablen handelt. Mit SET kannst du sie einer Umgebungsvariablen zuweisen (hast du mit d getan).
Des weiteren gibt es dynamische Variablen, die wie Umgebungsvariablen aussehen, aber keine sind. Solche sind bspw. date, time, random, errorlevel, cmdcmdline ...
Wenn es dann um Umgebungsvariablen geht, dann gilt, dass sie an Kindprozesse vererbt werden. Soll heißen, wird ein neuer Prozess aus dem Batchscript gestartet, sind alle Umgebungsvariablen aus dem Batch Prozess (cmd.exe) auch im neuen Prozess abgreifbar. Umgekehrt geht das nicht. Änderungen der Umgebung im Kindprozess, sind im Elternprozess nicht sichtbar.
Ein durch CALL aufgerufenes weiteres Batchscript, läuft im selben Prozess wie das aufrufende Batchscript. Änderungen an Umgebungsvariablen sind also für beide Scripts gültig.
Mit SETLOCAL lässt sich eine Subumgebung starten, in der zunächst die Elternumgebung übernommen wird. Mit ENDLOCAL kann diese wieder beendet werden. Nach Aufruf von ENDLOCAL (oder Beenden des Scripts, wobei das ENDLOCAL implizit aufgerufen wird), liegen alle zwischenzeitlich getätigten Änderungen an der Umgebung out of scope. Die Umgebung, wie vor dem SETLOCAL Aufruf, ist wieder gültig.
Grüße
rubberman