Batch file 循环日志记录的命令行

Batch file 循环日志记录的命令行,batch-file,for-loop,logging,command-line,cmd,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循环中 有人知道怎么做吗,还是我忽略了什么 谢谢 请尝试以下代码: @echo off rem Delete log fil

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

我尝试的是:

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

我一直在使用日志记录功能,应该是非常简单和基本的,但显然不是在for循环中

有人知道怎么做吗,还是我忽略了什么


谢谢

请尝试以下代码:

@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
在使用将
formatter.exe的输出写入stdoutstderr日志文件之前,首先删除日志文件

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

由于
mathml*.xml
也可以将文件名与名称中的空格相匹配,因此对文件名的引用用引号括起来,因为如果文件名在名称或路径中包含1个或多个空格,则
formatter.exe
的参数列表可能无效

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

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

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

  • del/?
  • 获取/?
  • 如果/?

可能该程序输出到stderr,在屏幕上出现任何文本之前,尝试用
2>&1
重定向它?(要放入日志文件的文本)是的,格式化程序以cmd格式生成文本
@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