ディレクトリ内のすべての *.pdf をマージしようとしています:
gswin64c -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=Total_Files.pdf -dBATCH *.pdf
これは Linux では完全に機能しますが、Windows で実行すると**Error: /undefinedfilename in *.pdf.**
. 誰かがこれを手伝ってくれませんか。
ディレクトリ内のすべての *.pdf をマージしようとしています:
gswin64c -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=Total_Files.pdf -dBATCH *.pdf
これは Linux では完全に機能しますが、Windows で実行すると**Error: /undefinedfilename in *.pdf.**
. 誰かがこれを手伝ってくれませんか。
(私の問題は実質的にまったく同じでした)。私の解決策(以前の回答の助けを借りて)は、元の質問にわずかによく答えます(実際のMS-DOSの例は以下にあります)
del filename.lst
for %%s in (C:\somefolder\some?wildcards*.pdf) do ECHO %%s >> filename.lst
gswin64c.... @filename.lst
説明する;
'>>' は MS-DOS で追加を意味するため、最初にファイル filename.lst を削除します。
%%s
MS-DOSバッチファイルで(の代わりに)機能することを(ちょうど今他の場所で)読みました%s
。明らかに-いつかファイル名にスペースが含まれる可能性があるので(私の場合はすでにそうでした)、安全を確保してファイル名を引用してください。したがって、より良いバッチファイルは次のとおりです。
del filename.lst
for %%s in (C:\somefolder\some?wildcards*.pdf) do ECHO "%%s" >> filename.lst
gswin64c.... @filename.lst
今のところ、これを使って多くの EPS ファイルを入力しましたが、多くの PDF ファイルも問題なく動作します。上記の例のように-実際に両方でテストしました-私の結果は、多くのEPSファイルを含むPDFです-1つのPDFに複数のPDFファイルからの多くのページがあります(質問に従って)。
このトピックに関する以前の質問がありました。答えは同じです。Ghostscript では、入力ファイル名にワイルドカードを使用できません。入力として使用する各ファイルを指定する必要があります。
Linux で動作するのはなぜですか? 使用しているシェルは、コマンド ラインを Ghostscript に渡す前に'*.ps' をファイルの完全なリストに展開するためです。
Windows でこれを行うには、シェル スクリプトを実行し、ファイル名をファイルにパイプして、そのファイルを引数として GS に渡す必要があります。
EG、次のようなもの
for %s in (*.ps) do ECHO %s >> filename.lst
gswin64c.... @filename.lst
forループの代わりに
dir /b /o:n *.ps > filename.lst
ジョブを完了します (ファイルのみを取得するには /b、名前でソートするには /o:n)。
並べ替えの問題を完全に解決するには、最初の 9 ファイルの名前を 01->09 に変更するか、出力ファイルをメモ帳で開いてこれらのいくつかのケースを手動で処理します。ただし、100 個を超えるファイルがある場合、これは面倒な場合があります。
私の問題を解決するのに役立ったこの1年前のスレッドをかき立てて申し訳ありませんが、「dir」を使用する方が簡単で柔軟性があり、開始する前にファイルリストを削除する必要はないと思いました.