我想在多个.tex
文件上运行pdflatex.exe,所有文件都以某个短语开头,我希望在流程开始之前获得提示。
我该怎么做?
我想要处理的文件的名称如下:
Chap01S01SS01_Description_Name_Whatever.tex
所以他们所有的名字都以:
开头Chap01
Chap02
and so forth...
所有名称以.tex
结尾。
显然,这些章节和章节的数字各不相同。这就是为什么我想通过提示让自己变得容易:如果我想在第3章中运行第2部分的文件,我会运行它们,在某些时候我会这样做喜欢重新生成第4章和第5章的所有文件......等等。
@ECHO OFF
SETLOCAL
SET "sourcedir=D:\files\"
SET /p mask="Which .tex-files?"
PUSHD "%sourcedir%"
FOR /f "tokens=1*delims=" %%a IN (
'dir /b /a-d "%mask%*.tex" '
) DO (
pdflatex.exe -interaction=nonstopmode --shell-escape "%%a" any other parameters perhaps containing "%%~na"
)
POPD
GOTO :EOF
完全归功于Magoo,我刚刚添加了参数-interaction=nonstopmode --shell-escape
以供pdflatex使用。如果你知道"外化"代表TikZ / pgfplots,使用它,否则删除 --shell-escape
。
BONUS 只需复制文件并写入lualatex.exe
而不是pdflatex.exe
以获取巨大的图片。请注意,您的序言必须相应地进行组织。
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET /p mask="select which *.tex files ? "
PUSHD "%sourcedir%"
FOR /f "tokens=1*delims=" %%a IN (
'dir /b /a-d "%mask%*.tex" '
) DO (
ECHO(pdflatex.exe "%%a" any other parameters perhaps containing "%%~na"
)
POPD
GOTO :EOF
如果您愿意,您需要更改sourcedir
的设置以适应您的情况,甚至使用类似的set /p
方案输入所需的目录。
由于您还没有说明pdflatex
命令行的内容,我只能显示指针。
所有pdflatex
命令仅用于ECHO
用于测试目的。 在您确认命令正确后,将ECHO(pdflatex
更改为pdflatex
以实际处理文件。
答案 1 :(得分:1)
假设你的通配符规范与你想要的所有文件相匹配,并且只有那些文件,那么处理它们就像
这样简单了。FOR %%f IN (Chap01*) DO ECHO Processing file: %%f
因此,该问题会在提示用户后减少创建通配符规范。您可以使用SET /P
以交互方式接受用户输入,例如:
SET chapter=
SET /P chapter=Chapter to process (ENTER for everything)?
REM now %chapter% contains the input, or blank if none was given
将所有内容放在一起以获得概念证明:
@ECHO OFF
SETLOCAL
SET chapter=
SET section=
SET /P chapter=Chapter to process (ENTER for all)?
SET /P section=Section to process (ENTER for all)?
REM We 'll be left-padding the values to two digits with zeroes
SET chapter_spec=??
SET chapter=00%chapter%
SET section=00%section%
IF NOT "%chapter%"=="00" SET chapter_spec=%chapter:~-2%
IF NOT "%section%"=="00" SET section_spec=S%section:~-2%
SET wildcard=Chap%chapter_spec%%section_spec%*.tex
ECHO Files to be processed:
FOR %%f IN (%wildcard%) DO ECHO %%f