2010-04-23 551 views
0

我想用蝙蝠來自動化我的一些工作。它應該首先查找某個註冊表項的值,然後將一些文件複製到包含在註冊表項值中的目錄中。 我用REG查詢命令來查找註冊表,如:如何使用Windows批處理腳本處理回車?

REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE 

結果似乎包含回車,我需要將其刪除,我已經嘗試了一些解決方案,但都以失敗告終。任何人都可以幫我嗎?

回答

3

對於特定的情況下,你可以這樣開始:

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

+1這就是我會想出的。如果該值包含空格,則可以使用'for/f「標記= 2 *」...'。這個網站給出了一些解釋:http://www.robvanderwoude.com/ntregistry.php – 2010-04-23 09:03:20

+0

@Pax,我試過你的解決方案。我將結果重定向到一個txt文件: echo%x%> 1.txt 它仍然包含回車符。它也返回false爲這條語句:if%x%==「x86」 – eric2323223 2010-04-23 09:16:28

+0

非常有幫助!謝謝,弗蘭克。 – eric2323223 2010-04-23 09:23:23