2012-08-08 105 views
3

我使用以下代碼來獲取啓動時運行的程序列表,並將它們記錄到文件中。查詢批處理腳本中的註冊表項

for /f "skip=2 tokens=1,2*" %%A in ('REG QUERY "HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run" 2^>NUL') do echo %%A : %%C >> Log.txt

這適用於當值名稱不包含空格的條目,但是當它,比如用「谷歌更新」,它攪亂了記號,並%% C成爲:REG_SZ <path> ,而不僅僅是路徑。

有沒有人有更好的方式來查詢註冊表並記錄它的值?

+0

如果你用「有usebackq」在選項? http://ss64.com/nt/for_f.htm – npocmaka 2012-08-09 06:23:51

+0

然後它根本不起作用。你的鏈接也死了。 – Josh 2012-08-09 12:05:44

+0

如果你使用usebackq,你需要用括號括住「'」(轉義按鈕) - 鏈接http://ss64.com/nt/for_f.html – npocmaka 2012-08-09 14:23:36

回答

1

嗯,我有一個工作解決方案,我仍然喜歡看有沒有人有更好的。

for /f "skip=2 tokens=*" %%A in ('REG QUERY "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" 2^>NUL') do (
    set regstr=%%A 
    set regstr=!regstr: =^|! 

    for /f "tokens=1,3 delims= |" %%X in ("!regstr!") do (
     echo %%X : %%Y 
    ) 
) 
0

特定於版本,在XP中工作,在Win 7中不起作用 - 請參閱註釋以瞭解詳細信息。

列在輸出由製表字符(0×09)分開的,所以只能使用標籤作爲分隔符:
for /f "skip=2 tokens=1,2* delims= " %%A
這並不表明的好,因爲標記如何處理白色字符,但經過delims=必須在字元是真實的TAB

+0

Doesn沒有工作,在我的系統上,輸出被4個空格字符分隔(Windows 7) – Josh 2012-08-09 14:45:22

+0

無賴!我注意到你必須使用不同版本的工具,但很快就駁回了他們在新版本中實際上會使得實用程序不太適用的想法 - 顯然我錯了。順便說一句我剛剛發現:[在Windows 7腳本與XP腳本reg.exe的行爲差異](http://social.technet.microsoft.com/Forums/zh/ITCG/thread/62b13853-d39e-4780-8859- c696411da942) - 它討論了一些方法 - 其中之一就是用一個不同的字符替換4個空格 - 也許你會發現其中一些有用。 – wmz 2012-08-09 16:15:23

0

這裏是通過WMI調用Win32_StartupCommand類更好的辦法,結果輸出到屏幕,以及在同一個文件夾中的CSV文件按腳本名稱:

@echo off 
setlocal enabledelayedexpansion 
    cd \ & pushd "%~dp0" 
if exist "%~n0.tmp" (del /f /q "%~n0.tmp") 
if exist "%~n0.csv" (del /f /q "%~n0.csv") 
wmic /namespace:\\root\cimv2 path Win32_StartupCommand get /all /format:csv >"%~n0.tmp" 
for /f "tokens=1,2,3,4,5,6,7,8,9 usebackq delims=, skip=2" %%a in (`type "%~n0.tmp"`) do (
    echo %%b, %%c >>"%~n0.csv" 
    echo %%b, %%c 
) 
if exist "%~n0.tmp" (del /f /q "%~n0.tmp") 
popd & endlocal 
exit /b 0`