wsaul1
Goto Top

Sichtbarkeit von batch Variablen

Hallo,
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%
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

Content-ID: 298393

Url: https://administrator.de/contentid/298393

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

rubberman
rubberman 06.03.2016 aktualisiert um 12:41:34 Uhr
Goto Top
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