【问题标题】:Command line for loop logging循环记录的命令行
【发布时间】:2015-09-04 06:31:22
【问题描述】:

我正在尝试记录 for 循环的结果,但只得到一个空文件。

我试过的是:

for %%f in (mathml*.xml) do (
 "D:\ProgramFiles\formater\formater.exe" -d %%f -o %%f.pdf -p @PDF  >> result.log
)

for %%f in (mathml*.xml) do (
 "D:\ProgramFiles\formater\formater.exe" -d %%f -o %%f.pdf -p @PDF
)  >> result.log

我一直都在使用日志记录功能,而且应该非常严格和基本使用,但显然不是在 for 循环中..?

有谁知道如何做到这一点,还是我忽略了什么。

谢谢!

【问题讨论】:

  • 也许该程序输出到 stderr,尝试在 >> 之前使用 2>&1 重定向它
  • 屏幕上是否出现任何文字? (要放入日志文件的文本)
  • 是的,格式化程序在cmd中生成文本

标签: batch-file for-loop logging command-line cmd


【解决方案1】:

试试下面的代码:

@echo off
rem Delete log file from previous batch execution.
del result.log 2>nul
for %%I in (mathml*.xml) do (
    "%ProgramFiles%\formater\formater.exe" -d "%%~fI" -o "%%~dpnI.pdf" -p @PDF 2>&1 >>result.log
)
for %%I in (result.log) do if %%~zI == 0 del result.log

在将formater.exe 的输出写入stdoutstderr 到使用command redirection operators 的日志文件之前,首先删除日志文件。

FOR循环中的命令行使用环境变量ProgramFiles的值代替D:\ProgramFiles

由于mathml*.xml 也可以匹配名称中带有空格的文件名,因此对文件名的引用用引号引起来,因为否则formater.exe 的参数列表可能因文件名中包含 1 个或多个空格而无效名称或路径。

文件名是用完整路径指定的,这有助于在发生错误时读取日志文件。

如果日志文件为0字节的空文件,则循环执行完成后删除日志文件。

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

  • del /?
  • for /?
  • if /?

【讨论】:

    猜你喜欢
    • 2014-06-15
    • 1970-01-01
    • 2023-03-20
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多