在windows批处理文件中嵌套命令并递归分析结果

在windows批处理文件中嵌套命令并递归分析结果,windows,batch-file,Windows,Batch File,我正在尝试获取下的所有注册表项 HKEY_Local_Machine\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList,如果REG_EXPAND_SZ键包含值C:\Users\sas,则删除- 理想的脚本步骤应该是: 1使用以下方法获取用户的所有注册表项: reg query "HKEY_Local_Machine\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"

我正在尝试获取下的所有注册表项 HKEY_Local_Machine\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList,如果REG_EXPAND_SZ键包含值C:\Users\sas,则删除-

理想的脚本步骤应该是:

1使用以下方法获取用户的所有注册表项:

reg query "HKEY_Local_Machine\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" 
    >> xyz.txt
2如果用户名是sas-我们可以在REG_EXPAND_SZ中获得,则删除此条目:

for /f "skip=10 tokens=* " %%a in (xyz.txt) do (
       for /f "eol=; skip=2 tokens=4 delims=\t" %k in ('reg query "%%a" /t REG_EXPAND_SZ') do (
    if %k == "sas-" (reg delete "%%a")
)
)
试试这个:

for /f "tokens=*" %%a in ('
    reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"') do (
        for /f "tokens=*" %%b in ('
            reg query "%%a" /v "ProfileImagePath" 2^>nul ^| find "sas-"') do 
                rem reg delete "%%a"
                echo "%%a" >>C:\names.txt
)
我是基于您查询ProfileImagePath值,并删除该值中包含sas-*的任何键。我还加入了一些换行符,为了便于观看,你必须删除这些换行符


请先测试一下,我现在已经将它们回显到一个文本文件中,如果您满意,请将rem从reg delete行中删除。

您应该能够从单个For循环中执行此操作;但是,我并不特别喜欢使用此方法删除配置文件的想法

@回音 For/F标记=1-2*%%%A在'Reg'查询中^ HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList/S^ /F ProfileImagePath/V 2^>num'Do 如果不是%%A%%B==ProfileImagePathREG\u EXPAND\u SZ 设置_C=Reg删除%%A%%B其他设置_P=%%~C SetLocal EnableDelayedExpansion 如果不是_P:C:\Users\sas-=!=_P回声=_C 端部 超时-1
如果您对控制台输出感到满意,则从第8行删除Echo=,并删除第10行。

您尝试了什么,以及您尝试的失败原因是什么?因此,这不是一个代码编写服务;最好的问题是那些提供有用信息的问题,这样那些回答问题的人可以引导你设计出自己的正确答案。看,在你的脚本中有什么不起作用?不确定是否输入错误,但你的%k应该是%%k谢谢你。它完全按照预期工作。谢谢lot@kedarbhusanikar很好,没问题