2010-03-11 41 views
2

我寫一個簡單的批處理文件,我得到這個「命令的語法不正確」的,如果statement.The批處理文件錯誤如下:寫一個簡單的bat文件?

@echo off 

set ARCH=%PROCESSOR_ARCHITECTURE% 

if %ARCH% == 'x86' 
(
) 

我也試過

if %ARCH% EQU 'x86' 

if語句有什麼問題?

回答

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 
+0

工作。謝謝。 其實我想檢查架構中是否包含字符串64.Something like: if%ARCH%=='* 64 *'(echo ok) 我該怎麼做? – Sam

+0

我不是批次專家,所以我希望有人能幫助你。但是,我知道vbscript能夠更輕鬆地完成你想要的任務,比如搜索字符串,正則表達式和更好的數據結構,比如數組,字典等等。所以如果你有興趣,可以學習如何使用vbscript。 – ghostdog74

+0

已經完成:-)。儘管如此,數組和字典在具有環境變量的批處理文件中也很自然。他們對於這些東西來說是一個全能的;-) – Joey

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' 

代替。

相關問題