Batchdatei gibt nach Verwendung von bat to exe keinen korrekten Wert zurück

Batchdatei gibt nach Verwendung von bat to exe keinen korrekten Wert zurück

Ich habe viele Probleme mit diesem Skript. Es soll eine Datei (die der Benutzer angibt) lesen und sie dann in der storeresultUmgebungsvariable 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, storvaranstatt 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 setBefehl definieren, sind nur im Rahmen des Prozesses gültig, in dem sie definiert sind. Dies lässt sich leicht mit einem Experiment beweisen:

  1. Öffnen Sie eine Eingabeaufforderung und versuchen Sie, sie zu definieren set a = b. Verwenden Sie set, um zu überprüfen, ob sie richtig definiert ist.
  2. Öffnen Sie nun eine zweite Eingabeaufforderung und rufen Sie auf set. Sie sehen, dass dies ain diesem Bereich nicht definiert ist.

storvar.exeist 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.

verwandte Informationen