對於特定的情況下,你可以這樣開始:
for /f "tokens=3" %i in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE ^| findstr PROCESSOR_ARCHITECTURE') do set x=%i
將設置%x%
到86(對我來說)。
如果上線的第三個值可以包含空格,你需要得到一個有點棘手
下面的腳本顯示了一種方式是棘手。它基本上使用調試線從reg
產生虛構的輸出,給你一個空間的體系結構。
@setlocal enableextensions enabledelayedexpansion
@echo off
for /f "tokens=2*" %%a in ('echo. PROCESSOR_ARCHITECTURE REG_SZ x86 64-bit grunter') do (
set arch=%%b
)
echo !arch!
endlocal
的輸出是:
x86 64-bit grunter
預期(記住它縮短了多個空格轉換爲一個)。 tokens=2*
位將令牌2(REG_SZ
)放入%%a
,並將所有後面的令牌放入%%b
。
所以一個好的最終腳本是:
@setlocal enableextensions enabledelayedexpansion
@echo off
set id=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
set key=PROCESSOR_ARCHITECTURE
for /f "tokens=2*" %%a in ('REG QUERY "!id!" /v !key! ^| findstr !key!') do (
set arch=%%b
)
echo !arch!
if !arch!==x86 echo arch was x86
endlocal
此腳本輸出:
x86
arch was x86
,所以你知道你想要它被設置。
+1這就是我會想出的。如果該值包含空格,則可以使用'for/f「標記= 2 *」...'。這個網站給出了一些解釋:http://www.robvanderwoude.com/ntregistry.php – 2010-04-23 09:03:20
@Pax,我試過你的解決方案。我將結果重定向到一個txt文件: echo%x%> 1.txt 它仍然包含回車符。它也返回false爲這條語句:if%x%==「x86」 – eric2323223 2010-04-23 09:16:28
非常有幫助!謝謝,弗蘭克。 – eric2323223 2010-04-23 09:23:23