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构造中),您将需要转义这样的管道符号^ |。