循环日志记录的命令行

时间:2015-09-04 06:31:22

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

我正在尝试记录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循环中。?

有谁知道怎么做,或者我忽略了什么。

谢谢!

1 个答案:

答案 0 :(得分:0)

请尝试以下代码:

@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

在使用command redirection operatorsformater.exe的输出写入 stdout stderr 到日志文件之前,先删除日志文件。

而不是D:\ProgramFiles环境变量ProgramFiles的值在 FOR 循环的命令行中使用。

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

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

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

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

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