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

最初の2つの引数が唯一の必須の引数であることに注意してください。%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

ここであなたを助けるための素晴らしいコマンドがあります:

シフト

バッチファイル内の置換可能なパラメータの位置を変更します。

SHIFT [/ n]

コマンド拡張が有効になっている場合、SHIFTコマンドは/ nスイッチをサポートし、n番目の引数でシフトを開始するようにコマンドに指示します。nは0から8の間です。例えば:

SHIFT / 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番目のパラメーター(%2)を使用しますが、各反復後に、コマンドラインで指定されたすべてのパラメーター値が1つ左にシフトされます。

于 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 に答える