Batch file 编写一个简单的bat文件?

Batch file 编写一个简单的bat文件?,batch-file,Batch File,我正在编写一个简单的批处理文件,在if语句中出现“命令语法不正确”错误。批处理文件如下所示: @echo off set ARCH=%PROCESSOR_ARCHITECTURE% if %ARCH% == 'x86' ( ) 我也试过了 if %ARCH% EQU 'x86' if语句有什么问题?试试看 @echo off set ARCH=%PROCESSOR_ARCHITECTURE% if %ARCH% == x86 ( echo ok ) rem or %ARCH% EQU x

我正在编写一个简单的批处理文件,在if语句中出现“命令语法不正确”错误。批处理文件如下所示:

@echo off

set ARCH=%PROCESSOR_ARCHITECTURE%

if %ARCH% == 'x86'
(
)
我也试过了

if %ARCH% EQU 'x86'
if语句有什么问题?

试试看

@echo off
set ARCH=%PROCESSOR_ARCHITECTURE%
if %ARCH% == x86 ( echo ok )
rem or %ARCH% EQU x86
既然你这么做了,为什么不呢,这是等价物

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
预计到达时间:

实际上,我想检查架构是否包含字符串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
中的转义字符,在这种用法中,它实际上是一个行连续运算符,因此解析器接受下一行的左括号作为当前语句的一部分(通常会以换行符终止)

是的,在比较中对文本字符串值使用单引号会使您陷入其他问题,正如前面所述,因为
cmd
中的所有内容本质上都是字符串文本。因此,您将与文本字符串进行比较

'x86'
而不是

x86

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

有效。谢谢实际上,我想检查架构是否包含字符串64。例如:如果%ARCH%=='64'(echo ok),我该怎么做?我不是批处理专家,所以我希望有人能帮助您。但是,我知道vbscript更容易实现您想要的功能,例如搜索字符串、正则表达式和更好的数据结构,如数组、字典等。因此,如果您感兴趣,请学习如何使用vbscript。已完成:-)。不过,数组和字典在带有环境变量的批处理文件中非常自然。它们是这些东西的总称;-)