如何将多行从FINDSTR输出到变量

补丁

不足为奇的是,官方文档在理解命令如何处理命令而不是文件列表的结果方面也无济于事,也不知道为什么它甚至被称为“ FOR”。是的,我已经知道stackoverflow充满了类似的问题,但是显然,由于批处理脚本受众多“破坏性”因素的影响,因此,即使作为一个不具有批处理经验的程序员,也很难不因成千上万的异常而迷失方向。可能会影响结果。除了学习可能的最佳答案外,我的目标是制定一个足够通用的问题,以表示这可能是最常见的任务,包括FINDSTR命令:

问题:

如何以某种方式获得FINDSTR的输出,该方式使我可以在循环内计算一次每个结果行?

我可以做的最“一般”(如果您了解我的意思,则为批量bs证明)示例如下:

假设这是secret_file.txt

some not intersting line
            A very intersting line = "secret1";
some not intersting line
            A very intersting line = "secret2";
some not intersting line
            A very intersting line = "secret3";
some not intersting line

现在,使用findstr命令,我可以像这样输出每条“秘密”行:

findstr /R /C:"secret.\"" secret_file.txt
                                A very intersting line = "secret1";
                                A very intersting line = "secret2";
                                A very intersting line = "secret3";

但是,如果不进一步解析,此结果就毫无用处了吗?无论如何,我可以在任何文本阅读器/编辑器上使用ctrl-F,无论如何,假设我现在希望一次输出每一行,以便我可以计算它,例如,将每个秘密保存到变量中,然后使用该变量以某种方式(实际上并不重要,我们可以回显它以使事情简单)。

现在,每个人都同意这样一个事实,即需要执行FOR循环。在语法上引用https://ss64.com/nt/for.html,我的script.bat应该如下所示:

@echo off

FOR /F %%A IN ('findstr /R /C:"secret.\"" secret_file.txt') DO ECHO Batch script language is completely fine, good job Microsoft!

这甚至没有任何输出,有人可以解释一下为什么吗?我的假设是findstr命令的输出与FOR命令的格式不兼容,这不像我可以检查的东西,因为源已关闭并且文档甚至都没有定义String一词。我准备提供任何详细信息,甚至可以编辑问题以使其更容易被Microsoft遗弃的批处理脚本编写者所看到。

用户名

使用"tokens=*"以剥离前导空格此批使用一个计数器来创建(伪)阵列secret[]

:: Q:\Test\2018\12\04\SO_53614102.cmd
@Echo off
set Cnt=0
FOR /F "tokens=*" %%A IN (
  'findstr /R /C:"secret.\"" secret_file.txt'
) DO (
  set /a Cnt+=1
  call Set Secret[%%Cnt%%]=%%A
)
Set Secret[

样本输出:

> SO_53614102.cmd
Secret[1]=A very intersting line = "secret1";
Secret[2]=A very intersting line = "secret2";
Secret[3]=A very intersting line = "secret3";

由于(代码块)中的变量在解析时进行了扩展,因此需要
延迟扩展(此处通过调用并加倍%%)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章