你的Reg Query HKLM\System\CurrentControlSet\services\Tcpip\Parameters /v Hostname /f -SAD- 总是返回Hostname值,以及适当的errorlevel返回值0 - 成功(或1 - 失败)不管 /f 开关中提供的数据或模式。
reg query /? 关于同时使用/V 和/F 开关有点简短:
/v Queries for a specific registry key values.
If omitted, all values for the key are queried.
Argument to this switch can be optional only when specified
along with /f switch. This specifies to search in valuenames only.
/f Specifies the data or pattern to search for.
Use double quotes if a string contains spaces. Default is "*".
Another official source 说关于/V 开关:
/v <ValueName> 指定注册表值名称
询问。如果省略,则返回 KeyName 的所有值名称。
如果/f 选项为
也用过。
可选? Read dictionary.com definitions for adjective optional:
- common: 由自己选择;不是必需的或强制性的;
- 英国:可能但不是强制性的;留给个人选择。
其实ValueName for /V parameter should be omitted if the /f option is also used(非官方):
要搜索注册表的一部分,请使用以下语法:
REG Query HKxx\subkey [/D|/K|/V] /F "search_pattern" [/S] [/E] [/C]
使用/D 搜索数据(即注册表值的值),/K
搜索匹配的键名,/V 搜索匹配的值
名称,或者这些都没有切换到搜索键、值和数据。
你可以:
示例脚本(部分注释):
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
set "_pattern=%~1" for demonstration purposes: first line parameter
if not defined _pattern set "_pattern=-SAD-"
rem next `_KeyName` variable keeps `reg query` line length <80 chars
set "_KeyName=HKLM\System\CurrentControlSet\services\Tcpip\Parameters"
echo(
echo `findstr` approach:
Reg Query "%_KeyName%" /v Hostname | findstr /I /C:"%_pattern%" >NUL
if errorlevel 1 (
echo `Hostname` data DOES NOT CONTAIN specified string "%_pattern%"
) else (
echo `Hostname` data CONTAINS specified string "%_pattern%"
)
echo(
echo `substring` approach:
rem set `_Hostname` and `_Domain`
for /F "tokens=1,2,*" %%G in ('
Reg Query "%_KeyName%" ^| findstr /I /R "\<Domain\> \<Hostname\>"
') do set "_%%G=%%I"
call set "_auxiliary=%%_Hostname:%_pattern%=%%"
if "%_auxiliary%"=="%_Hostname%" (
echo `Hostname` data DOES NOT CONTAIN specified string "%_pattern%"
) else (
echo `Hostname` data CONTAINS specified string "%_pattern%"
)
输出:
==> D:\bat\SO\39359057.bat -SAD-
`findstr` approach:
`Hostname` data DOES NOT CONTAIN specified string "-SAD-"
`substring` approach:
`Hostname` data DOES NOT CONTAIN specified string "-SAD-"
==> D:\bat\SO\39359057.bat %computername%
`findstr` approach:
`Hostname` data CONTAINS specified string "myNewPC"
`substring` approach:
`Hostname` data CONTAINS specified string "myNewPC"
==>