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

这适用于值名称不包含空格的条目,但是当它包含空格时,例如“Google Update”,它会弄乱令牌,并且 %%C 变为: REG_SZ <path>,而不仅仅是路径。

有没有人有更好的方法来查询注册表并记录其值?

4

3 回答 3

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
    )
)
于 2012-08-09T15:06:42.007 回答
0

特定版本,在 XP 中有效,在 Win 7 中无效 - 请参阅评论了解详细信息。

输出中的列由制表符 (0x09) 分隔,因此仅使用制表符作为分隔符:
for /f "skip=2 tokens=1,2* delims= " %%A
由于标记如何处理白色字符,这不能很好地显示,但后面的字符delims=必须是实际的TAB

于 2012-08-09T13:18:40.610 回答
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`
于 2012-08-18T05:52:04.097 回答