findstr用于' for循环时不包括整个字符串。 (.bat文件)。谁能帮我搞全绳?

时间:2014-12-12 00:11:00

标签: batch-file findstr

我正在运行.BAT脚本,该脚本正在读取文本文件并搜索以" HKLM"开头的关键字。在所述文本文件中的文本行的前面。输入文件是一个保存的审计请求文件,因此有正常的措辞,然后是HKLM注册表项。我的任务是拉出注册表项,然后在键上运行REG QUERY。

我一直在查看示例,发现这个for循环非常方便:

for /f %%i in ('FINDSTR /B /I "HKLM" %tmp_result_file%') do (
  IF "%%i" == "" (ECHO xx) ELSE ECHO %%i
)

我遇到的问题是,如果行中有一个空格我与搜索键HKLM匹配,则%% i仅显示该行的空行。这是输入文件中的一行:

  

HKLM \ Software \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_HTTP_USERNAME_PASSWORD_DISABLE

您将注意" Internet Explorer"之间的空格。当我运行.bat文件时,我得到以下输出:

C:\Work>1test.bat
HKLM\Software\Microsoft\Internet
HKLM\Software\Microsoft\Internet
HKLM\Software\Microsoft\Internet
HKLM\Software\Microsoft\Internet
HKLM\Software\Microsoft\Internet
HKLM\Software\Microsoft\Internet
HKLM\Software\Microsoft\Internet
HKLM\Software\Microsoft\Internet
HKLM\Software\Microsoft\Internet
HKLM\Software\Microsoft\Internet

C:\Work>

这显示了我如何只获得所有内容打印到空间的线的1/2。任何人都可以提供一些关于如何打印输入文件中列出的整行的提示吗?

另外一个问题:是否有办法在findstr

中有超过1个查询

1 个答案:

答案 0 :(得分:1)

单向:这指定没有字符来分隔标记。

for /f "delims=" %%i ...

另一种方式:这将整个字符串视为一个标记

for /f "tokens=*" %%i ...

其中一种方法将删除前导空格,但这不是一个问题。

就你的第二个问题而言......是的,只需将FINDSTR命令的输出传递给另一个FINDSTR命令。在您的情况下(在FOR构造中),您将需要像这样^ |

转义管道符号