2017-02-16 14 views
2

それぞれに1つのpdfを含む複数のディレクトリがあります。私は各pdfから1ページを抽出して元のpdfが入っていたディレクトリに保存しようとしていますので、今は2つのpdfを含む複数のディレクトリで終わります。複数のpdfsからページを抽出するためのディレクトリをループする

が、私は現在、作品ゴーストスクリプトを使用してこのコードを持っているが、pdfファイルはバッチファイルと同じディレクトリにある場合にのみ

echo on 
for %%I in ("D:\files\input\" *.pdf) do "C:\Program Files\gs\gs9.20\bin\gswin64c.exe" -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="%%~nI_p1.pdf" -dFirstPage=1 -dLastPage=1 "%%I" 

私が見カントなぜD内のすべてのディレクトリ:\ファイル\入力\はループしていません。

答えて

0

forループの使用が問題です。 for /?
Magooの方が速かったので、この完全な解決策をご覧ください。

@Echo off 
Set "GS=C:\Program Files\gs\gs9.20\bin\gswin64c.exe" 
Set "Opt=-dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dFirstPage=1 -dLastPage=1" 
Pushd "D:\files\input\" 
for /f "delims=" %%I in (
    'Dir /B/S *.pdf ^|find /v "_p1.pdf" ' 
) do If not exist "%%~dpnI_p1.pdf" "%GS%" %Opt% -sOutputFile="%%~dpnI_p1.pdf" "%%~fI" 
Popd 
+0

これは完全にはじめて働いた、ありがとう! – 99ajohnson

+0

Magoosのヒントを使用して、はい。上記に追加しました。 – LotPings

+0

ありがとう@Magoo – 99ajohnson

1

このコマンドは、"D:\files\input\"*.pdfという2つのパラメータで実行しています。

*.pdfファイルを検索する必要があります。受け入れられる方法は、サブディレクトリとディレクトリの基本的なフォーマットですが、ディレクトリ名はありません。

for /f "delims=" %%I in ('dir /b /s /a-d "D:\files\input\*.pdf" ') do ... 

ディレクトリです。

しかし、これは*_p1.pdf Sを含むすべての*.pdfに対してコマンドを実行します(つまり、すでに処理されるもの)((/ v)の終了をしないこれらの名前を見つけることでとても

for /f "delims=" %%I in ('dir /b /s /a-d "D:\files\input\*.pdf"^|findstr /v /i /e /L "_p1.pdf" ') do ... 

は、それらのファイルを除外します/ e)大文字小文字の区別なし(/ L) "_p1.pdf"ただし、_p1を再生成します。

for /f "delims=" %%I in ('dir /b /s /a-d "D:\files\input\*.pdf" ') do if not exist "%%~dp*_p1.pdf" ... 

はまだ処理されていない*.pdfを処理します。

(テストされていません)

+0

私は、 'gswin64c.exe'コマンドも調整が必要なことを示唆しています - '〜dpn'は完全なパス名+ベース名を与えるべきです。 – Magoo

関連する問題