Querying a registry key in a batch script

大兔子大兔子 提交于 2019-12-10 17:49:39

问题


I'm using the following code to get a list of programs being run at start up, and log them to a file.

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

This works with entries where the value name doesn't contain a space, but when it does, such as with "Google Update", it messes up the tokens, and %%C becomes: REG_SZ <path>, instead of just the path.

Does anyone have a better way to query the registry and log its values?


回答1:


Well I got one working solution, I'd still love to see if anyone has anything better.

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



回答2:


Version specific, works in XP, does not work in Win 7 - see comments for details.

Columns in the output are separated by tab char (0x09), so use only tab as a separator:
for /f "skip=2 tokens=1,2* delims= " %%A
This does not show well because of how markup handles white chars, but the character after delims= must be actual TAB




回答3:


Here's a better way via WMI calling the Win32_StartupCommand class, results output to screen as well as a CSV file in the same folder as per script name:

@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`


来源:https://stackoverflow.com/questions/11874598/querying-a-registry-key-in-a-batch-script

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!