Lo script, mi pare, salva il file in …old, poi lancia pdfcrop.exe usando lo steso nome per il file in entrate e per il file in uscita:
`
@echo off
echo Cropping…
FOR %%A IN (%*) DO (
echo %%A
IF /I %%~xA==.pdf (
copy /Y %%A “%%~nA.pdf.old”
cd “%%~dA%%~pA”
cd
pdfcrop.exe –margins 1 “%%~nA.pdf” “%%~nA.pdf”
cd
)
)
pause
`Mi sembra che l’errore sia lì, devono essere due nomi distinti ed eventualmente, eseguito il suo compito, lo script potrebbe anche cancellare i vecchi file e rinominare il nuovo col nome del vecchio, sempre che pdfcrop sia terminato col codice 0.
Non ho una macchina Windows sotto mano, e quindi non posso provare nessun codice Windows, ma direi che forse il problema è lì.
Inoltre non capisco i vari comandi cd che ci sono, non sono troppi e alla fine il file non si trova più nella cartella su cui sta lavorando pdfcrop?Probabilmente le mie sono osservazioni sceme, perché dall’ultima volta che ho scritto uno script bat per Windows sono passati parecchi anni. Comunque rivedrei lo script; il fatto che uno script scritto in modo simile funzioni su Linux, non è detto che, mutatis mutandis, funzioni anche su Windows.
Ciao Claudio,
i cd non ci sono nella versione originale dello script, erano stati aggiunti in una delle varie
prove per controllare la directory di lavoro. (cd usato senza argomenti restituisce la
directory corrente al contrario di Linux che ti riporta nella tua home).
Il fatto di usare lo stesso nome per il file di input e di output era proprio per evitare
la fatica di scrivere due righe di codice per rinominare il nuovo file come quello vecchio.
Però stupidamente non avevo mai pensato che in effetti potesse creare dei problemi!
Infatti potrebbe verificarsi il caso che il file di input cominci a essere sovrascritto
prima che pdfcrop l’abbia finito di leggere. Non ci avevo mai pensato dato che non
mi aveva mai dato alcun problema! Però forse lo potrebbe dare se il file da leggere è
particolarmente grande. Forse in tutti i miei test ho sempre usato file “piccoli”.
Proviamo questa nuova versione allora:
`@echo off
echo Cropping…
FOR %%A IN (%*) DO (
echo %%A
IF /I %%~xA==.pdf (
copy /Y %%A “%%~nA.pdf.old”
cd “%%~dA%%~pA”
pdfcrop.exe –margins 1 “%%~nA.pdf.old” “%%~nA.pdf”
)
)
pause`
Grazie per l’idea Claudio!
Ciao ciao.
Fra