在“ for循环”(.bat文件)中使用时,findstr不包括整个字符串。 谁能帮我弄清楚整个琴弦?

findstr is not including entire string when used in 'for loop' (.bat file). Can anyone help me get whole string?

我正在运行.BAT脚本,该脚本正在读取文本文件,并在所述文本文件的文本行的开头搜索以" HKLM"开头的关键字。输入文件是一个已保存的审核请求文件,因此有普通字词,然后是HKLM注册表项。我的任务是提取注册表项,然后在项上运行REG QUERY。

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

1
2
3
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文件时,得到以下输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
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
for /f"delims=" %%i ...

另一种方式:这会将整个字符串视为一个令牌

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

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

关于第二个问题...是的,只需将FINDSTR命令的输出传递给另一个FINDSTR命令。 对于您的情况(在FOR构造中),您将需要转义这样的管道符号^ |。