2013-06-27 38 views
1

我想找出一個OS是32位還是64位使用批處理文件,然後運行基於輸出的程序。這是我到目前爲止的內容如何使用批處理文件,如果語句帶有垂直條?

if (systeminfo | findstr = based) == "x64-based PC" run 64-bit Program 
else run 32-bit program 

我不斷收到「|在這個時候是意外的」。我曾嘗試使用帽子^而沒有括號,但我似乎無法通過該錯誤。有什麼我失蹤或另一種方式來做到這一點。批處理文件和程序將在閃存驅動器上,並在多臺Windows PC上使用。 systeminfo命令是我知道得到我需要的位結果的唯一方式,並且我知道該命令有效,但我需要程序來查看結果並做出決定。任何想法將不勝感激!在此先感謝

回答

6

不幸的是,您不能在if語句中包含(可能的)多行輸出systeminfo | findstr = based

你必須捕獲輸出是這樣的:

for /f "tokens=3" %%A in ('systeminfo ^| findstr based') do (
    if /i "%%~A"=="x64-based" (
     :: Run 64-bit Program 
    ) else (
     :: Run 32-bit Program 
    ) 
) 

不過,我只想用PROCESSOR_ARCHITECTURE建議。

reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE 

https://stackoverflow.com/a/1739055/891976

http://support.microsoft.com/kb/556009

+3

+1,還應當指出的是,'if'語句不能包含一個表達式不管的命令數量並且只能是特定的文本。 –

+0

感謝您的快速響應。我會嘗試註冊表查詢,因爲它似乎更容易使用。 – user2529815

0

這是一個常規的@Aacini

if exist "%SYSTEMDRIVE%\Program Files (x86)" (
    echo Type=64 bit 
) else (
    echo Type=32 bit 
)