CMD批处理 - 查找文字字符串

时间:2015-09-03 13:27:07

标签: batch-file cmd find

有一个有趣的问题。我在注册表上查询是否存在查询 - 如果存在,我沿着一条路走。如果它没有,我走下一条独立的道路。我将在底部放置一个代码示例。这是个问题:

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

有没有办法找到" 4"而不只是4?在引用或双引号之前使用转义字符只会让它完全错过。

这只是我的意思的一个例子。更改名称和值以保护无辜者。这是一个更大的脚本的一部分,所以' enabledelayedexpansion'是必要的。

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个数字,并且找到了它。我已经尝试了#34;"!ValueOne!"",但它完全失败了。我已经尝试了#34; ^"!ValueOne!^""得到相同的结果。我可以坚持下去:eof'在do调用结束时,但是我失去了可扩展性,我仍然需要监视哪个值首先出现,这使得事情变得更加复杂和笨拙。我将处理大约两百个价值观。到我完成时,他们不是顺序的。

思想?

1 个答案:

答案 0 :(得分:0)

findstr\<\>个特殊字符来表示字词边界:

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

或者,您可以通过添加reg query指示/e使用完全匹配,因此无需find

reg query hklm\software\SomeRegistry /s /v "Value" /d /e /f "!ValueOne!" >nul
if not errorlevel 1 echo ValueOne Found! & call :ValueOneSetup