ETA:
На самом деле я хочу проверить, содержит ли архитектура строку 64. Что-то вроде:
if %ARCH% == '*64*' ( echo ok )
Как я могу это сделать?
Для этого вы можете воспользоваться помощью небольшого инструмента под названием findstr
, который выполняет поиск шаблонов в файлах или вывод команды. Просто передайте значение переменной в findstr
:
echo %ARCH% | findstr 64
, которая найдет любую строку в выводе, содержащую 64 где-нибудь. В этом случае есть только одна строка, но это нормально.
Однако это также приводит к выводу строки на экран, поэтому измените ее на следующее:
echo %ARCH% | findstr 64 > nul 2>&1
, который перенаправит любой вывод (включая сообщения об ошибках) в ничто.
Теперь findstr
устанавливает специальное значение (код выхода или уровень ошибки) в зависимости от того, была найдена строка или нет. Вы можете использовать это, чтобы проверить, действительно ли 64
появилось в выводе:
echo %ARCH% | findstr 64 > nul 2>&1
if errorlevel 1 (
echo 64 did NOT appear (error level greater 0 usually means failure)
) else (
echo 64 DID appear
)
На ваш оригинальный вопрос:
Открывающая скобка должна встречаться в той же строке, что и сам оператор if
:
@echo off
set ARCH=%PROCESSOR_ARCHITECTURE%
if %ARCH% == x86 (
rem ...
)
работает.
Помните, что парсер cmd
основан на строках; поэтому рекомендуется соблюдать осторожность со всем, что должно занимать несколько строк. Другой вариант - избежать разрыва строки:
@echo off
set ARCH=%PROCESSOR_ARCHITECTURE%
if %ARCH% == x86 ^
(
rem ...
)
^
является escape-символом в cmd
, и в этом случае он фактически является оператором продолжения строки, поэтому синтаксический анализатор принимает открывающую скобку на следующей строке как часть текущего оператора (который обычно завершается разрыв строки).
И да, использование одинарных кавычек для литерального строкового значения в сравнении приведет вас к другим проблемам, как заметил Карлос Гутьеррес , поскольку по сути все в cmd
- строковый литерал. Таким образом, вы будете сравнивать с литеральной строкой
'x86'
вместо
x86
что на самом деле содержится в переменной окружения.