
Ich habe viele Probleme mit diesem Skript. Es soll eine Datei (die der Benutzer angibt) lesen und sie dann in der storeresult
Umgebungsvariable speichern.
Ich verwende einen BAT-zu-EXE-Konverter, der keine Batch-Befehle beeinflusst, das ist es also nicht. (Nur falls Sie sich fragen, warum ich anrufe, storvar
anstatt storvar.bat
)
Das Hauptskript ( storvar.exe
):
set a=%~1
set b=%~2
set c=%~3
for /f "delims=" %%a in (stor\%a%.stor) do set storeresult=%%a
pause
Das Skript, das ich zum Aufrufen des Skripts verwende (keine Fehler beim Aufruf):
storevar Hi hi
pause
echo %storeresult%
pause
Wenn ich es aufrufe, gibt es als Ergebnis ( %storeresult%
) einfach nichts zurück, ich kann das Problem nicht finden!
Antwort1
Wenn Sie eine Variable definieren und verwenden, müssen Sie immer ihreUmfang.
Umgebungsvariablen, die Sie mit dem set
Befehl definieren, sind nur im Rahmen des Prozesses gültig, in dem sie definiert sind. Dies lässt sich leicht mit einem Experiment beweisen:
- Öffnen Sie eine Eingabeaufforderung und versuchen Sie, sie zu definieren
set a = b
. Verwenden Sieset
, um zu überprüfen, ob sie richtig definiert ist. - Öffnen Sie nun eine zweite Eingabeaufforderung und rufen Sie auf
set
. Sie sehen, dass diesa
in diesem Bereich nicht definiert ist.
storvar.exe
ist ein separater Prozess. Daher hat er seinen eigenen Gültigkeitsbereich. Welche Umgebungsvariable Sie auch immer darin definieren, bleibt dort und wird beim Beenden gelöscht.
Gibt es also eine Alternative?Nun ja. Ich selbst verwende PowerShell anstelle der veralteten Batchdateien. Es kann Inhalte aus der Datei extrahieren und diese entweder direkt verwenden oder an das nächste Skript weitergeben. (Microsoft unterstützt offiziell das Kompilieren von PowerShell in EXE, obwohl Sie in der TechNet Gallery auch solche für Anfänger finden können.) AutoIt ist eine weitere Alternative.