需要输出重定向的批处理命令

需要输出重定向的批处理命令

当我想处理一堆 tex 文件时,我使用

for f in *.tex; do latex "$f" ; done;

当我需要将输出重定向到另一个文件时,例如 catdvi 的情况,我该怎么做?

以下操作无效:

for f in *.dvi ; do catdvi -e 1 -U $f  > "${f%.dvi}.txt"; done;

我究竟做错了什么?

答案1

您忘记引用$f,因此文件名可能由于文件名中的空格而被拆分。我还建议使用./*.dvias 以避免文件名以 开头时出现问题-(这会使大多数命令将其视为一组选项而不是文件名)

for f in ./*.dvi; do catdvi -e 1 -U "$f" > "${f%.dvi}.txt"; done

或者将两个循环合并起来

for f in ./*.tex; do 
    base=${f%.tex};
    latex "$f" &&
    catdvi -e 1 -U "$base.dvi" > "$base.txt";
done

答案2

通过降低命令的复杂性来测试它。首先尝试一下:

for f in *.dvi ; do catdvi -e 1 -U $f >> catdvi.txt; done;

如果这样可行,则问题出在您的动态文件名创建代码上。也许这样可行:

for f in *.dvi ; do catdvi -e 1 -U $f > "${f%.dvi.txt}"; done;

f% 想要做什么?应该用 $f 代替吗?

for f in *.dvi ; do catdvi -e 1 -U $f > "${$f.dvi.txt}"; done;

相关内容