【问题标题】:How can I run an executable on files whose name begin with a specific phrase? (Windows 7)如何在名称以特定短语开头的文件上运行可执行文件? (Windows 7的)
【发布时间】:2014-08-13 23:38:45
【问题描述】:

我想在多个 .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

奖励 只需复制文件并写入 lualatex.exe 而不是 pdflatex.exe 即可获得巨大的图形。请注意,您的序言必须相应地组织。

【问题讨论】:

  • 示例会很好 - 文件要处理和文件要排除
  • @Magoo 感谢您的评论。编辑了操作。 HTH?

标签: batch-file command-line pdflatex


【解决方案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 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO(pdflatex更改为pdflatex以实际处理文件。

【讨论】:

  • 好的,这是迄今为止最好的。正在努力……你对最终结果感兴趣吗?
  • 我相信会有人。
  • 当然。 :) 编辑了操作。
【解决方案2】:

假设你有一个通配符规范匹配你想要的所有文件,并且只有那些文件,处理它们是微不足道的

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

【讨论】:

  • 这是一个好看的答案。 Magoo 对我个人来说看起来有点简单,所以我目前正在努力实现他/她的。感谢你的付出。我当然会尝试它只是为了学习。
猜你喜欢
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 2012-02-05
  • 2015-07-30
相关资源
最近更新 更多