Batch file CMD批处理-查找文本字符串

Batch file CMD批处理-查找文本字符串,batch-file,cmd,find,Batch File,Cmd,Find,有个有趣的问题。我在注册表上拉一个查询,看看它是否存在——如果存在,我沿着一条路径走。如果不行,我就走另一条路。我将在底部放一个代码示例。问题是: FIND没有可用于文字解释的an/L开关。我的一个设置是4,另一个是14。所以14行得很好,4同时找到了4和14 有没有办法让它找到“4”而不仅仅是4?在引号或双引号之前使用转义字符只会使其完全丢失 这只是我的意思的一个例子。更改名称和值以保护无辜者。这是一个更大的脚本的一部分,因此“enabledayedexpansion”是必需的 setloca

有个有趣的问题。我在注册表上拉一个查询,看看它是否存在——如果存在,我沿着一条路径走。如果不行,我就走另一条路。我将在底部放一个代码示例。问题是:

FIND没有可用于文字解释的an/L开关。我的一个设置是4,另一个是14。所以14行得很好,4同时找到了4和14

有没有办法让它找到“4”而不仅仅是4?在引号或双引号之前使用转义字符只会使其完全丢失

这只是我的意思的一个例子。更改名称和值以保护无辜者。这是一个更大的脚本的一部分,因此“enabledayedexpansion”是必需的

setlocal enabledelayedexpansion
set ValueOne=4
set ValueTwo=14

    rem This section determines if additional specific concept settings are needed.
:ConceptCheck
rem DEBUG
echo CONCEPT CHECK

for /f "tokens=1" %%G in ('reg query hklm\software\SomeRegistry\ /v "Value" ^| find "!ValueTwo!"') do (
echo Value Two Found!
call :ValueTwoSetup)

for /f "tokens=1" %%G in ('reg query hklm\software\SomeRegistry\ /v "Value" ^| find "!ValueOne!"') do (
echo Value One Found!
call :ValueOneSetup)

goto :eof
运行时,如果条目为ValueTwo,则效果很好。ValueOne同时调用ValueTwo和它自己,因为14中包含数字4,而find捕获了它。我试过了!一号!“”但是它完全失败了。我试过“^”!一号^”“同样的结果。我可以在do调用的末尾粘贴一个“goto:eof”,但这样我就失去了可扩展性,而且我还必须监视哪个值首先出现,这使得事情变得更加复杂和笨拙。到我完成时,我将处理大约200个“值”,它们不是连续的

思想?

\
特殊字符来表示单词边界:

findstr /r /c:"\<!ValueOne!\>"

不管怎样,我自己解决了。我将寻找REG_SZ 4。无法使用FindStr。您不能将命令导入其中,它只从文件中读取-否则,我将使用/L进行文字解释。但是,没有考虑使用reg查询的/e。好电话。在我几分钟前想到的解决方案中,我搜索了“REG_SZ!ValueOne!”,效果很好。不知道为什么在我开始摆弄开关之前我没有想到它。你可以通过管道进入findstr。
reg query hklm\software\SomeRegistry /s /v "Value" /d /e /f "!ValueOne!" >nul
if not errorlevel 1 echo ValueOne Found! & call :ValueOneSetup