如何将FOR循环输出转换为文本文件?

时间:2017-03-16 04:02:31

标签: windows for-loop cmd

如何在文本文件中保存for循环输出?

我的尝试是

for /F "tokens=5-6" %K in ('git fetch -v 2^>^&1 ^| findstr /B /C:"Receiving objects:"') do echo %K %L

这里我需要从windows cmd.exe输出中获取行粗体格式化的行。

  

remote:计数对象:760,完成。
  remote:压缩对象:100%(366/366),完成。
  遥控:总计760(delta 429),重复使用688(delta 386)R
  接收物品:100%(760/760),8.02 MiB | 436.00 KiB / s,完成。
  解决增量:100%(429/429),完成。

坦率地说,我不知道这条线是如何运作的。我是cmd.exe的新手

[OR]

如何在文本文件中获取提取详细信息?

git init & git remote add origin https://gitlab.company.com/project.git & (git fetch -v > test.txt)

要么我需要在C#编码的文本文件或字符串中获取它。

1 个答案:

答案 0 :(得分:0)

您想要将哪些数据写入哪个文件并不是很清楚。我假设您希望从Receiving objects: 8.02 MiB开始,将info.txt写入我在@echo off del info.txt 2>nul for /F "tokens=1,2,5,6" %%A in ('git fetch -v 2^>^&1') do ( if "%%A %%B" == "Receiving objects:" echo %%C %%D>>Info.txt ) 下面的批处理代码中命名的文件。

git fetch -v 2>&1

命令 FOR 执行命令行2>&1

使用> STDERR 的错误输出重定向到 STDOUT ,从而必须在此处转义运算符&^使用插入符git fetch -v 2>&1将解释为Windows命令解释器解析 FOR 命令行时的文字字符,但稍后执行2^>^&1被解释为重定向操作符。

我不知道您的任务是否真的需要将错误消息重定向到标准消息的标准输出句柄。我不这么认为,因此您最有可能将2^>nul替换为git,以通过重定向设备 NUL 来取消Receiving输出的错误消息。

写入 STDOUT 的已执行命令的输出由 FOR 捕获并逐行处理。以分号开头的空行和行将被跳过。所有其他行都使用指定的选项进行处理。

使用空格和制表符作为分隔符,每行将 FOR 拆分为子字符串(标记)。因此,兴趣线分为:

  1. objects:
  2. 100%
  3. (760/760),
  4. 8.02
  5. MiB
  6. |
  7. 436.00
  8. KiB/s,
  9. done.
  10. tokens=1,2,5,6
  11. 使用A指定只有第一,第二,第五和第六个字符串是有意义的,应该分配给循环变量。第一个分配给 FOR 命令行中指定的循环变量B。第二个被分配给ASCII表中的下一个循环变量,即C。这就是为什么循环变量区分大小写而环境变量不是的原因。第五个字符串分配给循环变量D,第六个字符串分配给循环变量Receiving objects:

    如果 FOR 可以确定至少一个令牌(在这种情况下是第一个字符串),则执行命令。

    IF 条件将区分大小写的前两个标记与Receiving objects:之间的空格进行比较,以确定当前行是否为包含感兴趣数据的行。

    如果此字符串比较成功,则其他两个令牌将输出到 STDOUT 重定向到文件中,如果输出包含多行@echo off del info.txt 2>nul for /F "tokens=1,2*" %%A in ('git fetch -v 2^>^&1') do ( if "%%A %%B" == "Receiving objects:" echo %%A %%B %%C>>Info.txt ) ,则附加数据。

    但是如果你想将整行写入文本文件,你可以使用:

    2

    C之后的星号表示在获得第二个空格/制表符分隔的字符串后,该行的其余部分不应进一步拆分并分配给第三个循环变量A,这意味着对于此输入示例:

    • Receiving ... B
    • objects: ... C
    • 100% (760/760), 8.02 MiB | 436.00 KiB/s, done. ... Receiving objects:

    但是,只需将所有以info.txt开头的行写入文件git fetch -v | findstr /B /C:"Receiving objects:" >info.txt ,就可以在命令提示符窗口中使用以下命令行:

    del /?

    要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

    • echo /?
    • findstr /?
    • for /?
    • divs.setAttribute('data-id' , data[i].id);

    另请阅读Microsoft有关Using Command Redirection Operators

    的文章