Piszę prosty plik .bat i mam dziwne zachowanie. Jest kilka miejsc, w których muszę zrobić proste, jeśli/inaczej, ale kod wewnątrz bloków nie działa poprawnie.Problem z dziwnym zasięgiem w pliku .bat
Oto prosty przypadek, który pokazuje błąd:
@echo off
set MODE=FOOBAR
if "%~1"=="" (
set MODE=all
echo mode: %MODE%
) else (
set MODE=%~1
echo mode: %MODE%
)
echo mode: %MODE%
Wyjście Dostaję jest:
C:\>test.bat test
mode: FOOBAR
mode: test
Dlaczego echo wewnątrz bloku kodu nie otrzymuję nową wartość zmienna? W aktualnym kodzie, który piszę, potrzebuję zbudować kilka zmiennych i wskazać je w zakresie if/else. Mogłabym to zmienić, aby używać etykiet i znaków zamiast znaku "/ else", ale to nie wydaje się prawie tak czyste.
Co powoduje takie zachowanie? Czy istnieje jakiś limit zmiennych w blokach kodu?
Czy istnieje sposób, aby ustawić tę flagę programowo w górnej części pliku bat? W większości przypadków będzie on uruchamiany przez inny plik nietoperza, a środowisko, w którym działa, nie jest naprawione (może być dwukrotne kliknięcie, może być uruchamiane z powłoki cygwin, może pochodzić z cmd itp.). – Herms
@Herms, "setlocal enabledelayedexpansion" na początku, "endlocal" na końcu. – paxdiablo
Dzięki. To uratowało mój tyłek paxdiablo. –