Batch file 编写一个简单的bat文件?
我正在编写一个简单的批处理文件,在if语句中出现“命令语法不正确”错误。批处理文件如下所示: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
@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。已完成:-)。不过,数组和字典在带有环境变量的批处理文件中非常自然。它们是这些东西的总称;-)