Круглые скобки в Windows Значения переменных cmd-скрипта не допускаются? - PullRequest
4 голосов
/ 09 марта 2010

Почему выдает следующий командный скрипт Windows 7 .cmd:

set SUN_JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_17

if 3==3 (
 set JAVA_HOME=%SUN_JAVA_HOME%
)
echo ready

Следующее сообщение об ошибке вместо печати «готово»

\Java\jdk1.6.0_17 was unexpected at this time.

Сообщение об ошибке исчезает, если я удаляю "(x86)" в имени пути.

Ответы [ 5 ]

2 голосов
/ 09 марта 2010

в командной строке введите следующие команды

C:
CD\
dir /ogen /x

Это покажет вам имя из 8 символов для Program Files (x86)

Используйте это имя (вероятно, "Progra ~ 2" )

1 голос
/ 03 июня 2013

Вы должны заключить команду set в двойные кавычки

замена

set SUN_JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_17

от

set SUN_JAVA_HOME="C:\Program Files (x86)\Java\jdk1.6.0_17"

потому что в пути есть пробел

1 голос
/ 09 марта 2010

Проблема заключается в группировке скобок после части if 3==3.

При синтаксическом анализе команды set JAVA_HOME=%SUN_JAVA_HOME% интерпретатор немедленно заменяет переменную %SUN_JAVA_HOME%, что приводит к раннему совпадению закрывающей скобки в (386).

Этого можно избежать, если включить отложенное расширение и заменить %SUN_JAVA_HOME% на !SUN_JAVA_HOME!:

setlocal enabledelayedexpansion

set SUN_JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_17

if 3==3 (
    set JAVA_HOME=!SUN_JAVA_HOME!
)
echo ready
0 голосов
/ 02 августа 2012

Предыдущий ответ в порядке. Я просто хочу уточнить это на простом примере. Речь идет об обнаружении каталога Program Files для 32-битного приложения в системах x86 и x64. Там похожая проблема с "(x86)".

IF DEFINED ProgramFiles(x86) (GOTO x64) ELSE (GOTO x86)
:x64
SET AppDir=%ProgramFiles(x86)%\SomeFolder
GOTO next
:x86
SET AppDir=%ProgramFiles%\SomeFolder

:next
ECHO %AppDir%
0 голосов
/ 09 марта 2010

Я написал об этом некоторое время назад (немного устарел).

В качестве альтернативы, если вам нужно сгруппировать команды, используйте подпрограмму:

if 3==3 call :foo
...
goto :eof
:foo
...
goto :eof
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...