我正在写一个简单的批处理文件,我得到这个“命令的语法不正确”错误的if语句。批处理文件如下:
@echo off
set ARCH=%PROCESSOR_ARCHITECTURE%
if %ARCH% == 'x86'
(
)
我也试过
if %ARCH% EQU 'x86'
if语句有什么问题?
答案 0 :(得分:5)
试
@echo off
set ARCH=%PROCESSOR_ARCHITECTURE%
if %ARCH% == x86 ( echo ok )
rem or %ARCH% EQU x86
当你在这里时,为什么不learn vbscript,这是等效的
Set WshShell = WScript.CreateObject("WScript.Shell")
Set Wsharch = WshShell.Environment("SYSTEM")
arch=Wsharch.Item("PROCESSOR_ARCHITECTURE")
If arch = "x86" Then
WScript.Echo "PROCESSOR_ARCHITECTURE is x86"
End If
' if Instr(arch,"86") > 0 then
答案 1 :(得分:4)
<强> 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
环境变量中实际包含的内容。