Piszę plik wsadowy, aby odczytać ścieżkę z pliku i ustawić ją na zmienną środowiskową. Ten plik wsadowy zostanie użyty (wywołany) przez wiele innych plików wsadowych w celu pobrania zmiennej. Podczas pisania pliku wsadowego napotkałem problem z rozszerzeniem zmiennej, więc użyłem SETLOCAL ENABLEDELAYEDEXPANSION
, aby rozwiązać ten problem. Ale robiąc to inne pliki wsadowe, które go używają, nie są w stanie uzyskać ustawionych zmiennych.Skrypt wsadowy tworzy zmienną setlocal dostępną dla innych plików wsadowych
Poniżej jest skrypt wsadowy,
getVariables.bat
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
if EXIST "test.dat" (
for /F "tokens=*" %%I in (test.dat) do set %%I
echo setting JAVA_HOME to :: !JAVA_HOME!
echo setting JAVA to !JAVA!
)
W moim innym pliku wsadowego Używam powyższy plik batach uzyskać zmienne ustawione
another.bat
call getVariables.dat
echo "%JAVA%"
Ale echo drukuje „”, gdzie nie jest ustawione. Jeśli jest tak z powodu setlocal
, jak mogę to przezwyciężyć? Potrzebuję także setlocal
do opóźnienia rozszerzenia i do wystąpienia w czasie wykonywania. Jakieś rozwiązanie tego problemu? Proszę pomóż mi.
To był problem ze mną. Mam nawyk używania SETLOCAL we wszystkich moich skryptach. Wreszcie znalazłem jeden wyjątek, w którym spowodował problem. – djangofan