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 ...
)
^
является экранирующий символ в cmd
и в этом использовать его эффективно оператор линейного продолжения, поэтому анализатор принимает открывающую скобку на следующей строке в рамках текущий оператор (который обычно заканчивается разрывом строки).
И да, использование одинарных кавычек для литерального строкового значения в сравнении приведет вас к другим проблемам, так как Carlos Gutiérrez отметил, поскольку по существу все в cmd
является строковым литералом. Таким образом, вы будете сравнивать с символьной строки
'x86'
вместо
x86
, что на самом деле содержится в переменной окружения.
Это сработало. Благодарю. На самом деле, я хочу проверить, содержит ли архитектура строку 64. Что-то вроде: if% ARCH% == '* 64 *' (echo ok) Как я могу это сделать? – Sam
Я не эксперт по партии, поэтому я надеюсь, что кто-то может помочь вам в этом. однако, я знаю, что vbscript делает то, что вам нужно более легко, например, поиск строк, регулярных выражений и улучшенных структур данных, таких как массивы, словари и т. д. Поэтому, если вам интересно, научитесь использовать vbscript вместо этого. – ghostdog74
Уже сделано :-). Тем не менее, массивы и словари довольно естественно встречаются в пакетных файлах с переменными окружения. Они все-таки уловки для этих вещей ;-) – Joey