Nawiasy w zmiennych wewnątrz bloków IF
W jednym z moich skryptów muszę użyć zmiennych, które zawierają nawiasy wewnątrzIF
instrukcje, ale albo łańcuchowi brakuje nawiasu zamykającego, albo skrypt kończy działanie przedwcześnie* was unexpected at this time
(nie jest to gwiazdka), w zależności od scenariusza.
Przykład
@echo off
SET path=%programFiles(x86)%
echo Perfect output: %path%
IF NOT "%path%" == "" (
REM Variable is defined
echo Broken output: %path%
)
pause >nul
Wydajność
Perfect output: C:\Program Files (x86)
Broken output: C:\Program Files (x86
Myślę / wiem, że dzieje się tak, ponieważ myśli o nawiasie zamykającym wC:\Program Files (x86)
jest koniecIF
instrukcja i kończy się przedecho
jest gotowy.
Czy istnieje prosty sposób na obejście tego? Najlepiej bez uciekania się do
pojedyncza liniaIF
oświadczenia, ponieważ muszę uruchomić w nich więcej niż jedną linię kodu,obfite ilościGOTO
s, ponieważ nie jest to praktyczne,SETLOCAL EnableDelayedExpansion
i używanie!path!
zamiast%path%
, jak pamiętam, czytam gdzieś, że ta metoda nie działa konsekwentnie w różnych systemach operacyjnych.Jeśli nie, z radością przyjmuję najbardziej niezawodne oferowane rozwiązanie, cokolwiek to jest.
(Scenariusz nie nadaje się do debaty. To tylko wyrafinowany, skoncentrowany przykład problemu. Struktura musi być taka, jak w moim aktualnym skrypcie, z powodów, w które nie będę wchodzić. i to po prostu wprowadzi w błąd rzeczy i odwróci uwagę od faktycznego problemu.)