批处理脚本在注册表中搜索路径值

问题描述 投票:-2回答:1

某些注册表数据值包含带有Windows路径的字符串,例如:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Test]
"30-Jan-19-15:49:55.31-23207"="C:\\Test folder\\Newfolder\\image 1 (2).png"
"30-Jan-19-16:46:50.12-19158"="C:\\Test folder\\Newfolder\\image1 (2).png"
"30-Jan-19-16:49:11.27-19621"="C:\\Test folder\\Newfolder\\image1(2).png"
"30-Jan-19-16:49:12.27-19623"="C:\\Test folder\\Newfolder\\Folder2"
"30-Jan-19-16:49:32.37-19663"="C:\\Test folder\\Newfolder\\Folder2\\image5.png"
"30-Jan-19-16:49:37.57-19163"="C:\\Test folder\\Newfolder\\Folder2\\image8.png"
"30-Jan-19-16:51:31.27-10621"="C:\\Test folder\\Newfolder2\\mytext1(2).txt"
"30-Jan-19-16:56:11.27-19111"="C:\\Test folder\\Newfolder2\\mytext2(3).txt"
"30-Jan-19-16:59:01.27-14521"="C:\\Test folder\\Newfolder3\\myaudio3.mp3"
"30-Jan-19-16:59:41.27-19135"="C:\\Test folder\\Newfolder3\\myaudio5.mp3"

我想找到与父文件夹匹配的值并删除它们。例如,我传递文件夹C:\Test folder\Newfolder,应找到并删除此注册表数据:

"30-Jan-19-15:49:55.31-23207"="C:\\Test folder\\Newfolder\\image 1 (2).png"
"30-Jan-19-16:46:50.12-19158"="C:\\Test folder\\Newfolder\\image1 (2).png"
"30-Jan-19-16:49:11.27-19621"="C:\\Test folder\\Newfolder\\image1(2).png"
"30-Jan-19-16:49:12.27-19623"="C:\\Test folder\\Newfolder\\Folder2"
"30-Jan-19-16:49:32.37-19663"="C:\\Test folder\\Newfolder\\Folder2\\image5.png"
"30-Jan-19-16:49:37.57-19163"="C:\\Test folder\\Newfolder\\Folder2\\image8.png"

我试图首先找到与指定字符串匹配的注册表值,例如pathtosearch=C:\Test folder\Newfolder,但没有匹配的值。脚本有什么问题?以及如何更正找到的注册表值并删除它们?

@echo off
setlocal enabledelayedexpansion

set "val="
set "pathtosearch=C:\Test folder\Newfolder"

echo.
set "hkey=HKCU\Software\Test"
for /f "tokens=3*" %%a in ('%systemroot%\system32\reg.exe query %hkey%') do (
    if "%%b"=="" (set "val=%%a") else (set "val=%%a %%b")
    echo.!val!
    echo %pathtosearch%
    echo !val!|%systemroot%\system32\findstr.exe /xr /c:\"^%pathtosearch%\[^\]+$\" && (
        echo "found"
    ) || (
        echo "not found"
    )
    echo.
)
exit 0
windows batch-file search registry
1个回答
0
投票

目前还不完全清楚你要做什么,所以这是一个猜测:

@Echo Off
Set "SPath=C:\Test folder\Newfolder"
Set "URKey=HKCU\Software\Test"
Set "FPath="
For /F "Delims=" %%A In ('
    ""%__AppDir__%Reg.exe" Query "%URKey%" /F "%SPath%" /D 2>Nul|"%__AppDir__%Find.exe" /I "%SPath%""
') Do If Not Defined FPath Set "FPath=%%A"
If Defined FPath (Call Set "FPath=%SPath%%%FPath:*%SPath%=%%"
    Echo Found) Else Echo Not Found 
If Defined FPath Echo(%FPath%
Pause
© www.soinside.com 2019 - 2024. All rights reserved.