首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将FOR循环输出到文本文件中?

如何将FOR循环输出到文本文件中?
EN

Stack Overflow用户
提问于 2017-03-16 04:02:31
回答 1查看 4.4K关注 0票数 0

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

我的尝试是

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

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

远程:计数对象: 760,完成。 远程:压缩对象: 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的新手

如何获取文本文件中的抓取细节?

代码语言:javascript
复制
git init & git remote add origin https://gitlab.company.com/project.git & (git fetch -v > test.txt)

要么我需要在文本文件中获得它,要么需要在C#编码中获得它。

EN

回答 1

Stack Overflow用户

发布于 2017-03-16 07:08:42

还不清楚要将哪些数据写入哪个文件。我假设您希望从以Receiving objects:开头的行开始,将8.02 MiB写入一个文件中,我在info.txt下面的批处理代码中指定了该文件。

代码语言:javascript
复制
@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

将输出到STDERR的错误用2>&1重定向到STDOUT,在这里必须对操作符>&进行转义,使用插入字符^来解释E 216命令行上的文字字符,但在以后执行D17&>时解释为重定向操作符。

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

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

每一行都由拆分成子字符串(令牌),使用空格和制表符字符作为分隔符。因此,利益关系分为:

  1. Receiving
  2. objects:
  3. 100%
  4. (760/760),
  5. 8.02
  6. MiB
  7. |
  8. 436.00
  9. KiB/s,
  10. done.

tokens=1,2,5,6中,指定只有第一、第二、第五和第六个字符串是感兴趣的,应该分配给循环变量。第一个被分配给在中为命令行指定的循环变量。第二种方法是将循环变量赋值给ASCII表中的下一个循环变量,即B。这就是为什么循环变量区分大小写而环境变量不敏感的原因。第五个字符串分配给循环变量C,第六个字符串分配给循环变量D

如果FOR可以确定至少一个令牌(在本例中为第一个字符串),则执行命令。

if 条件将行前两个标记与Receiving objects:之间的空格进行比较,以确定当前行是否是具有感兴趣数据的行。

如果此字符串比较成功,则将其他两个标记输出到STDOUT,如果输出包含带有Receiving objects:的多行,则将其重定向到带有附加数据的文件中。

但是,如果希望将整行写入文本文件,则可以使用:

代码语言:javascript
复制
@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,这意味着在这个输入示例中:

  • AReceiving
  • Bobjects:
  • C100% (760/760), 8.02 MiB | 436.00 KiB/s, done.

但是,为了使以Receiving objects:开始的所有行都写入info.txt文件,可以在命令提示符窗口中使用以下命令行:

代码语言:javascript
复制
git fetch -v | findstr /B /C:"Receiving objects:" >info.txt

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在那里执行以下命令,并非常仔细地读取为每个命令显示的所有帮助页。

  • del /?
  • echo /?
  • findstr /?
  • for /?

还可以阅读微软关于使用命令重定向运算符的文章。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42825095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档