Проблема:
В bat-нике есть некоторая переменная, значение которой содержит скобки. В моем случае переменная эта была CLASSPATH, и содержала она строку "C:/Program Files (x86)/IBM/WebSphere MQ/Java/lib/com.ibm.mq.jar". В bat-нике эта переменная используется следующим образом (в моем случае батником был стартовый скрипт Oracle Weblogic 10.3.5):
if NOT "%PRE_CLASSPATH%"=="" (, т.е. для группировки используются круглые скобки.
set CLASSPATH=%PRE_CLASSPATH%;%CLASSPATH%
)
При попытке выполнить bat-ник валится ошибка:
set CLASSPATH=;C:/Program Files (x86)/IBM/WebSphere MQ/Java/lib/com.ibm.mq.jarПричина:
/IBM/WebSphere was unexpected at this time.
При раскрытии переменной присутствующая в ней закрывающая скобка воспринимается интерпретатором как закрытие группировки после "if", а остаток строки интерпретируется как следующая команда ("/IBM/WebSphere...").
Решение:
Использовать отложенное раскрытие проблемной переменной, заключив её в "!" вместо "%". В таком случае значение переменной будет подставляться в команду при непосредственном её выполнении и уже не будет приводить к ситнаксическим ошибкам:
if NOT "%PRE_CLASSPATH%"=="" (
set CLASSPATH=%PRE_CLASSPATH%;!CLASSPATH!
)
Правда, перед этим нужно это самое отложенное раскрытие разрешить:
setlocal enabledelayedexpansionСпасибо http://stackoverflow.com/questions/2410501/parenthesis-in-windows-cmd-script-variable-values-not-allowed.
Комментариев нет:
Отправить комментарий