写一个简单的bat文件?

时间:2010-03-11 02:10:35

标签: batch-file

我正在写一个简单的批处理文件,我得到这个“命令的语法不正确”错误的if语句。批处理文件如下:

@echo off

set ARCH=%PROCESSOR_ARCHITECTURE%

if %ARCH% == 'x86'
(
)

我也试过

if %ARCH% EQU 'x86'

if语句有什么问题?

2 个答案:

答案 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

环境变量中实际包含的内容。