2015-09-04 107 views
0

我正在尝试记录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

[调试您的批处理文件(http://www.robvanderwoude.com/battech_debugging.php) – JosefZ

+1

也许这节目输出到标准错误,尝试在'>>' – wOxxOm

+0

之前用'2>&1'重定向它是否在屏幕上出现任何文字? (您想要放入日志文件的文本) – aschipfl

回答

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 

日志文件的formater.exe输出写到标准输出标准错误使用command redirection operators日志文件之前先删除。

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

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

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

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

对于理解使用的命令以及它们如何工作,打开命令提示符窗口中,执行有下面的命令,并完全读取显示每个命令的所有帮助页面非常谨慎。

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