2

在 Windows 上,我编写了一个调用另一个工具的简单 bat 脚本。但是,此工具在使用某些选项时会输出一些特定的调试行(似乎是原始代码中的错误,我不能/不想修改)。

有没有办法抑制与特定模式匹配的命令输出的行(例如以 开头DEBUG:)?

(仅供参考:工具是,并且perl 源代码latexdiff.exe中的某些print STDERR "DEBUG:...行不是以变量为条件的,并且每次使用该选项时都会打印出来。我也不想完全抑制 stderr。)debug--flatten

4

1 回答 1

4

您可以尝试以下方法:

latexdiff.exe 2>&1| findstr /v /b "DEBUG:"

/v选项基本上改变了模式,即findstr.exe让一切都通过,而不是匹配模式。该/b选项只是说模式应该出现在一行的开头。

2>&1STDERR 重定向到 STDOUT 并且是必需的,因为正如您所说,这些行被写入 STDERR,而不是 STDOUT。请注意,作为“副作用”,现在所有输出都写入 STDOUT。

如果您需要在 STDOUT 上有其他输出,请更新,您可以执行以下操作

latexdiff.exe old.tex new.tex > diff.tex 2> latexdiff.stderr
type latexdiff.stderr | findstr /v /b "DEBUG:"

也就是说,将 STDOUT 重定向到您的差异文件,将 STDERR 重定向到某个文件。之后,您只需键入文件即可查看错误消息。

您可能希望将其放入它自己的批处理文件中,如下所示:

@echo off
setlocal
REM determine a suitable temporary filename
set error_file=%TEMP%\latexdiff.%RANDOM%.stderr
REM run actual diff and save its exit code for later
latexdiff.exe "%~1" "%~2" > "%~3" 2> "%error_file%"
set error_level=%ERRORLEVEL%
REM dump error messages
type "%error_file%" | findstr /v /b "DEBUG:"
REM remove temporary error file and exit with latexdiff's exit code.
del /q "%error_file%"
exit /b %error_level%

然后你可以这样称呼它:latexdiff_wrapper.cmd old.tex new.tex diff.tex. 除了使用临时文件,缺点是在处理时不会出现错误消息,而是在最后出现。如果这不是问题,则不应该因为差异应该很快,您可能会发现该解决方案很有用。

于 2012-07-06T12:32:16.193 回答