【发布时间】:2018-12-04 13:31:11
【问题描述】:
毫不奇怪,官方文档在理解如何 该命令是否处理命令的结果而不是文件列表,为什么它甚至不被称为“FOR”。是的,我已经知道了 stackoverflow 充满了类似的问题,但很明显,因为批处理脚本受很多因素的影响 “破”的因素,即使作为一个非批处理经验的程序员,也很难不迷失在 数以千计的例外和注意事项可能会影响结果。 除了从可能的最佳答案中学习之外,我的目标是制定一个足够通用的问题 代表问题可能是最常见的任务,包括 FINDSTR 命令:
问题:
如何以一种允许我同时计算每个结果行的方式获得 FINDSTR 的输出 可能在循环内部?
我可以制作的最“通用”(批量 bs-proof,如果您知道我的意思)示例如下:
假设这是 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 对于这件事,无论如何,假设我现在想输出每一行 ONE AT THE TIME,以便我可以计算它,因为 例如,将每个秘密保存到一个变量中,然后以某种方式使用该变量 (如何做并不重要,我们可以简单地回显它)。
现在,每个人都同意这样一个事实,即对于这种任务,需要一个 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 命令的格式不兼容,不像我可以检查的那样,因为源已关闭并且 文档甚至不费心定义字符串这个词。 我已准备好提供任何详细信息,甚至可以编辑问题以使想要成为的人更容易看到 被微软抛弃的批处理脚本。
【问题讨论】:
-
由于您回显了一个常量文本,因此不会输出任何已处理的行内容,仅输出您的文本的 3 倍。
-
没关系,因为即使是常量文本也不会被打印出来,如果我的目标是让代码正常工作,我会为 /F "delims=" %%a 编写类似 [code] 的东西in ('findstr /c:secret secret_file.txt') do echo %%a [/code],这很完美,但我想了解为什么问题中提到的代码不起作用。我应该逃避什么吗?
标签: batch-file for-loop cmd findstr