Parêntese em variáveis dentro de blocos IF
Em um dos meus scripts, eu preciso usar variáveis que contenham parênteses dentroIF
instruções, mas ou a cadeia está faltando um parêntese de fechamento ou o script sai prematuramente com* was unexpected at this time
(na verdade não é um asterisco), dependendo do cenário.
Exemplo
@echo off
SET path=%programFiles(x86)%
echo Perfect output: %path%
IF NOT "%path%" == "" (
REM Variable is defined
echo Broken output: %path%
)
pause >nul
Saída
Perfect output: C:\Program Files (x86)
Broken output: C:\Program Files (x86
Eu acho / sei que isso é porque acha que o parêntese de fechamentoC:\Program Files (x86)
é o fim doIF
declaração e sai antes daecho
está completo.
Existe uma maneira simples de contornar isso? De preferência sem recorrer a
única linhaIF
declarações, como eu preciso executar mais de uma linha de código dentro deles,quantidades copiosas deGOTO
s, como não é prático,SETLOCAL EnableDelayedExpansion
e usando!path!
ao invés de%path%
, pelo que me lembro de ler em algum lugar que esse método não funciona de forma consistente em todos os sistemas operacionais.Caso contrário, aceitarei com alegria a solução mais confiável oferecida, seja ela qual for.
(O cenário não está em debate. Este é apenas um exemplo refinado e concentrado do problema. A estrutura precisa ser assim, como está no meu roteiro real, por razões que não vou abordar. ponto e vai apenas confundir as coisas e distrair a questão real.)