2017-02-16 5 views
2

Ich habe mehrere Verzeichnisse, die jeweils ein PDF enthalten. Ich versuche, Seite 1 von jedem pdf zu extrahieren und es in dem Verzeichnis zu behalten, in dem sich das ursprüngliche pdf befand, so dass ich am Ende mit den mehreren Verzeichnissen komme, die jetzt zwei pdfs enthalten.Durchsuchen von Verzeichnissen, um Seiten aus mehreren PDFs zu extrahieren

ich zur Zeit mit diesem Code Geister Scripte haben, die funktioniert, aber nur, wenn die PDF-Dateien im selben Verzeichnis wie die Batch-Datei

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" 

Ich kann nicht sehen, warum alle Verzeichnisse in D: \ Dateien \ input \ werden nicht durchgeschleift.

Antwort

0

Ihre Nutzung der for-Schleife ist das Problem. Siehe for /?
Magoo war schneller, siehe diese Komplettlösung.

@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

Dies funktionierte perfekt zum ersten Mal, vielen Dank! – 99ajohnson

+0

Mit Magoos Hinweis, ja. Hinzugefügt oben. – LotPings

+0

danke euch beiden @Magoo – 99ajohnson

1

Sie führen den Befehl mit zwei Parametern "D:\files\input\" und *.pdf aus.

Sie müssen für jede *.pdf Datei suchen. Der akzeptierte Weg ist

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

Verzeichnis, Basisformat, mit Unterverzeichnissen, aber keine Verzeichnisnamen.

Dies würde jedoch den Befehl gegen jede *.pdf einschließlich der *_p1.pdf s (dh diejenigen, die bereits verarbeitet) so

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

würden diese Dateien ausschließen, indem diese Namen finden, die dies nicht tun (/ v) Ende (/ e) mit dem Literal (/ L) "_p1.pdf" ohne Berücksichtigung von case (/ i). Es würde jedoch die _p1 s regenerieren.

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

würde diese *.pdf s verarbeiten, die noch nicht verarbeitet wurden.

(nicht getestet)

+0

Ich würde vorschlagen, dass der 'gswin64c.exe 'Befehl möglicherweise auch Anpassung erfordern -' ~ dpn' sollte den vollständigen Pfadnamen + Basisname bereitstellen. – Magoo

Verwandte Themen