首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有逻辑运算符的批处理文件reg查询(否)

带有逻辑运算符的批处理文件reg查询(否)
EN

Stack Overflow用户
提问于 2015-05-01 12:53:40
回答 1查看 560关注 0票数 2

我正在尝试编写一个reg查询批处理文件,以查找不包含某些内容的关键数据。当前,此代码搜索密钥Dependent Files (REG_MULTI_SZ)并将输出写入文件。我需要它忽略Dependent Files中包含"**.GPD*“的任何数据。

如何将逻辑运算符合并到简单的REG查询中?

代码语言:javascript
复制
@echo off
set file=c:\Temp\regcomplist.txt
for /f "Tokens=*" %%g in (%file%) do (
    echo %%g>> c:\Temp\regquery.txt
    REG QUERY "\\%%g\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-3\Lexmark Universal v2 XL" /v "Dependent Files">> c:\Temp\regquery.txt
    echo.>> c:\Temp\regquery.txt
    echo.>> c:\Temp\regquery.txt
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-02 12:04:48

使用rojo建议的命令的批处理代码是:

代码语言:javascript
复制
@echo off
set "ListFile=C:\Temp\regcomplist.txt"
set "ResultsFile=C:\Temp\regquery.txt"
for /f "delims=" %%g in (%ListFile%) do (
    echo %%g>>%ResultsFile%
    %SystemRoot%\System32\reg.exe query "\\%%g\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-3\Lexmark Universal v2 XL" /v "Dependent Files" | %SystemRoot%\System32\find.exe /i /v "**.GPD*">>%ResultsFile%
    echo.>>%ResultsFile%
    echo.>>%ResultsFile%
)

添加注册表值Dependent Files类型为REG_MULTI_SZ的信息后,我转到安装了打印机的计算机(我的计算机尚未安装),并使用regedit将打印机的注册表项导出到.reg文件。接下来,我将这个注册表文件导入到我的计算机的注册表中,并对此键执行一次reg query,以查看多行值是如何由reg写入控制台的。

然后,我可以开发下面的批注文件。

代码语言:javascript
复制
@echo off
setlocal EnableDelayedExpansion

set "Printer=Lexmark Universal v2 XL"
set "ListFile=C:\Temp\regcomplist.txt"
set "ResultsFile=C:\Temp\regquery.txt"
if exist "%ResultsFile%" del "%ResultsFile%"

rem Run the procedure GetPrinterFiles on each computer of list file.
for /f "delims=" %%g in (%ListFile%) do (
    echo %%g>>%ResultsFile%
    call :GetPrinterFiles "%%g"
    echo.>>%ResultsFile%
    echo.>>%ResultsFile%
)
endlocal
rem Exit this batch file.
goto :EOF

rem Get multiline string with the file names from registry and parse that
rem string with procedure GetFileNames if the printer is installed at all.

:GetPrinterFiles
for /F "skip=2 tokens=3*" %%A in ('%SystemRoot%\System32\reg.exe query "\\%~1\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-3\%Printer%" /v "Dependent Files" 2^>nul') do (
    if "%%A"== "REG_MULTI_SZ" (
        call :GetFileNames "%%B"
        goto :EOF
    )
)
rem Document in results file that printer is not installed on this computer.
echo Error: %Printer% not installed.>>%ResultsFile%

rem Exit procedure GetPrinterFiles and return to main loop above.
goto :EOF

rem The file names are passed from procedure GetPrinterFiles in a long string
rem with \0 as separator between the file names. This long string is split
rem into individual file names by the FOR loop below. Each file name is
rem assigned to an environment variable. A case-sensitive comparison is
rem made between value of this variable having all ".GPD" case-insensitive
rem removed with unmodified value of this variable. If modified variable
rem value is equal unmodified variable value, ".GPD" is not present in any
rem case in file name resulting in writing the file name into the results
rem file. Otherwise this file containing ".GPD" in any case is ignored.

:GetFileNames
set "FilesList=%~1"
for %%F in ("%FilesList:\0=","%") do (
    set "FileName=%%~F"
    if "!FileName:.GPD=!" == "!FileName!" (
        echo !FileName!>>%ResultsFile%
    )
)
rem Exit procedure GetFileNames and return to GetPrinterFiles procedure above.
goto :EOF

感谢rojoseparating variable with a symbol into different parts上的回答,向我展示了如何在输出时处理带有\0reg分隔的所有文件名的长字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29987195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档