0

我想创建一个batch.bat可以执行如下的批处理文件

batch.bat output PDF PNG JPG EPS

生产output.list包含

filename1.pdf
filename2.pdf
filename3.pdf
filename4.pdf
filename1.png
filename2.png
filename3.jpg
filename4.eps

请注意,前两个参数是唯一的强制参数。我的努力如下,但我认为它使用了一种野蛮的编程技术,因为%1它用于准备一个新的输出文件,并且不可避免地在第一次迭代中再次使用它,它什么都不做。

rem batch.bat
echo off

rem %1 represents the output file name
rem the remaining args represent file extension

dir /b *.%1 > %1.list

for %%x in (%*) do (dir /b *.%%x >> %1.list)

如何巧妙地创建一个 DOS 批处理文件,该文件生成一个输出文件,其中包含批处理参数中指定的文件列表?

编辑:

我需要批处理文件,因为它将从以下代码中调用。

\documentclass{article}
\usepackage{graphicx}

\newread\myfile
\newcount\TotalFiles

\AtBeginDocument
{
    \immediate\write18{IterateFiles.bat \jobname\space pdf png jpg eps}
    \openin\myfile=\jobname.list\relax
}

\AtEndDocument
{
    \closein\myfile
}

\begin{document}
\makeatletter
\loop
    \read\myfile to \mydata
    \unless\ifeof\myfile
    \filename@parse{\mydata}
    \section*{\mydata}
    \includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{\filename@base}
    \advance\TotalFiles1\relax
\repeat
\makeatother

\section*{Summary}
There are \the\TotalFiles\ files in total.
\end{document}
4

3 回答 3

4

这里有一个很好的命令可以帮助您:

转移

更改批处理文件中可替换参数的位置。

换档 [/n]

如果启用了命令扩展,则 SHIFT 命令支持 /n 开关,该开关告诉命令从第 n 个参数开始移位,其中 n 可能介于零和八之间。例如:

换档 /2

会将 %3 转移到 %2,将 %4 转移到 %3,等等,而使 %0 和 %1 不受影响。

因此,要调整您的代码以使用shift

REM ...

REM need to create output file name here as it will be gone after the first iteration
SET output_file=%1.list
COPY NUL %output_file%

:LOOP
REM jump out of the loop if there are no more parameters are present
IF "%2"=="" GOTO :EOF

REM 
DIR /b *.%2 >> %output_file%
SHIFT
GOTO :LOOP

这将始终使用第二个参数 ( %2),但在每次迭代后,命令行中提供的所有参数值都将向左移动一个。

于 2012-08-31T11:54:53.903 回答
2

这是一个更简单的批处理解决方案

@echo off
setlocal
copy nul "%~1.list"
set "go="
for %%x in (%*) do if defined go (dir /b *.%%x >>"%~1.list") else set go=1
于 2012-08-31T12:30:35.000 回答
0

在批处理中调用的 WMI 命令将实现相同的目的:

wmic /output:"output.list" /namespace:\\root\cimv2 path CIM_LogicalFile where "Extension='PDF' or Extension='PNG' or Extension='JPG' or Extension='EPS'" get FileName,Extension /all /format:csv
于 2012-09-01T23:31:50.233 回答