查询批处理脚本中的注册表项(Querying a registry key in a batch s

2019-09-21 01:09发布

我用下面的代码获取的程序是在启动时运行的列表,并把它们记录到文件中。

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> ,而不是只是路径。

有没有人有更好的方式来查询注册并登录自己的价值观?

Answer 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
    )
)


Answer 2:

具体的版本,工作在XP中,在Win 7不起作用-详见注释。

在输出列由标签炭(0×09)分离,所以只使用标签作为分隔符:
for /f "skip=2 tokens=1,2* delims= " %%A
这并不表明的好,因为标记如何处理白色字符,但之后的字符delims=必须是实际的TAB



Answer 3:

以下是通过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`


文章来源: Querying a registry key in a batch script