我寫一個簡單的批處理文件,我得到這個「命令的語法不正確」的,如果statement.The批處理文件錯誤如下:寫一個簡單的bat文件?
@echo off
set ARCH=%PROCESSOR_ARCHITECTURE%
if %ARCH% == 'x86'
(
)
我也試過
if %ARCH% EQU 'x86'
if語句有什麼問題?
我寫一個簡單的批處理文件,我得到這個「命令的語法不正確」的,如果statement.The批處理文件錯誤如下:寫一個簡單的bat文件?
@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
和,而你在它,爲什麼不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
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.Something like: if%ARCH%=='* 64 *'(echo ok) 我該怎麼做? – Sam
我不是批次專家,所以我希望有人能幫助你。但是,我知道vbscript能夠更輕鬆地完成你想要的任務,比如搜索字符串,正則表達式和更好的數據結構,比如數組,字典等等。所以如果你有興趣,可以學習如何使用vbscript。 – ghostdog74
已經完成:-)。儘管如此,數組和字典在具有環境變量的批處理文件中也很自然。他們對於這些東西來說是一個全能的;-) – Joey