-2

У меня проблема с настройкой значения внутри блока if. Пожалуйста, рассмотрите следующий код:

\mytool.bat

@echo off
if not "%adder%" == "" (
    set val=%val%;%adder%
) else (
    echo please set adder first
)
echo value="%val%"

Теперь, когда я запускаю следующее через cmd:

set adder=a(bc)d
mytool

Это дает мне ошибку т.е.

d was unexpected at this time.

С другой стороны, следующее работает

set adder=abcd
mytool

с выходным value=";abcd"
Я хочу подобное поведение, даже если у adder есть скобки.
Я тоже попробовал это. Но сохраняются только изменения переменной val внутри пакета.

2 ответа2

3

Как установить значение переменной в блоке if, если значение содержит скобки?

Если значение переменной содержит круглые скобки ( или ) вам нужно заключить в кавычки set выражение правой части в наборе командных файлов set "val=%val%;%adder%"

test.cmd:

@echo off
if not "%adder%" == "" (
    set "val=%val%;%adder%"
) else (
    echo please set adder first
)
echo value=%val%

выход:

C:\test>set val=somevalue

C:\test>set adder=a(bc)d

C:\test>test
value=somevalue;a(bc)d

"Поскольку значение val не сохраняется вне пакетного файла"

Не правда.

C:\test>set | findstr val
val=somevalue;a(bc)d

Дальнейшее чтение

1

мое предложение:

if (condition_TRUE) goto goodbye_parenthesis_BEGIN

goto goodbye_parenthesis_END  ----- line when previous condition is FALSE ----
:goodbye_parenthesis_BEGIN ----- line when previous condition is TRUE ----

...
variable treatment
...

:goodbye_parenthesis_END

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .