在Windows上,我编写了一个简单的bat脚本来调用另一个工具。但是,当使用某些选项时,此工具会输出一些特定的调试行(似乎是原始代码中的错误,我不能/不想修改)。
有没有办法通过匹配特定模式的命令来抑制行输出(比如从DEBUG:
开始)?
(FYIO:该工具为latexdiff.exe
,perl source code中有一些print STDERR "DEBUG:...
行不以debug
变量为条件并且每次都打印使用了--flatten
选项。我也不想完全压制stderr。)
答案 0 :(得分:3)
您可以尝试以下方法:
latexdiff.exe 2>&1| findstr /v /b "DEBUG:"
/v
选项基本上会改变模式,即findstr.exe
会让一切都通过,而不是匹配模式。 /b
选项只是说模式应该出现在一行的开头。
2>&1
将STDERR重定向到STDOUT并且是必需的,因为正如您所说,这些行被写入STDERR,而不是STDOUT。请注意,作为“副作用”,现在所有输出都写入STDOUT。
更新如果您需要在STDOUT上有其他输出,您可以执行类似的操作
latexdiff.exe old.tex new.tex > diff.tex 2> latexdiff.stderr
type latexdiff.stderr | findstr /v /b "DEBUG:"
也就是说,将STDOUT重定向到您的diff文件,将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
。使用临时文件的公寓,缺点是,处理时不会出现错误消息,但最后。如果这不是问题,那不应该因为差异很快,你可能会觉得这个解决方案很有用。