Newsgroup: it.comp.os.win.windows7
Titolo: aiuto batch file

Devo cambiare i metadati dei miei pdf
 
Ho un programma che funziona a linea di comando e prende quindi quello che gli passo.
 
Ma ci sto diventando scemo perché non riesco a capire dove sto sbagliando e perché le operazioni sulle variabili stringhe non funzionano.
 
prendiamo un file con nome di file in questa struttura:
 
AA.VV. - 2011 - Super Iam8bit.pdf
 
dove in pratica ho "nome autore" - "anno pubblicazione" - "titolo".pdf
 
Il fatto che ci siano 3 caratteri " - " mi sta facendo uscire matto. L'ottimale sarebbe che si potesse proprio utilizzare l'intera stringa di 3 caratteri come delimitatore, ma non ci riesco.
 
Per togliere dai metadati gli spazi di troppo ho trovato un modo balordo con un loop "for" per togliere lo spazio iniziale dal titolo, ma non riesco a togliere lo spazio finale dagli autori.
 
il programma che ho scritto è questo:
 
----------------------------------------------------
@echo off
prompt $T$_$P$G
SETLOCAL ENABLEDELAYEDEXPANSION
for /F "tokens=1,2,* delims=-" %%A in ('dir /b *.pdf') do (
for /F "tokens=*" %%Z in ('dir /b "%%A-%%B-%%~nC.pdf"') do (
if exist "%%~fZ" (
echo cambio metadati: %%Z
for /f "tokens=*" %%1 in ("%%~nC") do (
echo titolo: "%%1"
echo autore: "%%A"
echo string1: "%A:~0,-1%"
set %%2=%A:~0,-1%
echo string2: "%%2"
BeCyPDFMetaEdit "%%~fZ" -s -d 2 -T "%%1" -S " " -A "%%2" -R " " -P " " -K " " -C auto -M auto -X 1 -PL 3 -PM 1 -Pm 1 -HT 0 -HM 0 -HW 0 -CW 0 -FW 0 -DDT 1
))))
pause
----------------------------------------------------
 
quello che vedo a video è il seguente:
----------------------------------------------------
cambio metadati: AA.VV. - 2011 - Super Iam8bit.pdf
titolo: "Super Iam8bit"
autore: "AA.VV. "
string1: "~0,-1"
string2: ""
AA.VV. - 2011 - Super Iam8bit.pdf
Press any key to continue . . .
----------------------------------------------------
 
come si può vedere nella riga denominata in echo string2 che mi doveva dare la variabile autore senza lo spazio finale risulta vuota, mentre la riga che ho denominato string1 che mi doveva dare la stessa cosa, mi da invece tutto quello dopo i due punti che non ha senso.
 
Dove sto facendo casino?

 Devo cambiare i metadati dei miei pdf
 
capisco che è una domanda scema, ma a quel livello di
complessità i files batch mi hanno sempre creato casini.
Ti sarebbe possibile rinominare i files eventualmente con
uno schema così?
 
AAVV$2011$Titolo_del_file.pdf
 
Se puoi cambiare i nomi la cosa è facilmente fattibile,
ma magari prima di procedere vediamo se puoi (ovviamente i
delimitatori possono essere una sequenza qualsiasi a tuoi
piacimento).
 
 
-- 
There are three kinds of people in the world.
Those that can count, and those that can't.
 

 piacimento).
 
posso cambiare i nomi dei files, ma cambiarli per poi ri-cambiarli dopo l'esecuzione del batch renderebbe tutto ancora più complesso
 
senza contare che NON VOGLIO passare come metadati TITOLO_DEL_LIBRO. Sto facendo casino per togliere uno spazio dopo il nome dell'autore, secondo te mettere gli underscore è meglio?
 
Delrey, Lester - 1938 - Helen O'Loy.pdf
 
Nome di uno dei file a caso. È ben organizzato.
 
Delrey,_Lester$1938$Helen_O'Loy.pdf
 
È chaos primordiale.

 underscore è meglio?
 
 
Purtroppo non capisco esattamente lo spazio in cui ti puoi
muovere; ti suggerisco di vedere se Bulk Rename Utility
possa aiutarti a modificare i nomi quel tanto che basta
per poi utilizzarli nei tag. Il programma è gratis e molto
intuitivo, e lavora sia su tutti i files di una directory
che sui nomi di directory. Per esempio puoi sostituire
 
" - "
 
con
 
"-"
 
(il tutto senza virgolette) e fin qui è banale. La cosa
più bella però è la sua capacità di maneggiare le
espressioni regolari. Posso farti l'esempio con cui sono
familiare, ovvero dopo le varie operazioni di rinomina mi
trovo sempre con cose del tipo
 
nomefile_a_caso_.jpg
 
in cui voglio eliminare l'underscore finale. Il comando è
questo: rimpiazza
 
(.*)(_$)
 
con
 
\1
 
Se conosci le espressioni regolari l'esempio era banale e
superfluo altrimenti osservando la sintassi delle E.R.
scopri che non esiste alcun pattern di nome che non possa
essere messo a posto come desideri, nel caso estremo con
più di un passaggio.
 
Sorry se il tutto non ti è di aiuto, io ho cercato quel
programma proprio perché non ne potevo più della sintassi
dei file batch di win.
 
C'è anche ReNamer Pro che è persino più potente perché può 
applicare regole in cascata (ma è meno duttile sulla 
gestione di alberi di directory, tanto che io li uso 
entrambi a seconda del caso).
 
ciao
 
Apx.


dove in pratica ho "nome autore" - "anno pubblicazione" - "titolo".pdf
 
 
Non ne esci anche perché la struttura del nome file non è univoca,
e non solo con il batch, ma con qualsiasi linguaggio di programmazione
avresti enormi difficoltà a trovare un algoritmo per raggiungere il tuo obiettivo
 
 
-- 
http://freewareonline.org/
 
http://netuser.altervista.org/
 
http://salclem2.altervista.org/
 
 

 C'è anche ReNamer Pro che è persino più potente perché può 
 
Conosco entrambi ed ho installato il primo.
 
Sto creando un file batch per ridurre il numero di passaggi manuali. Non per aumentarli.
 
Mi tocca già dare a mano i nomi ai file perché tra guthemberg ("h" a caso che non mi ricordo) e "humble book bundle" e "story bundle" e altri, ognuno ha una idea sua di come andrebbero nominati i files, e spesso sono lettere e cifre a caso.
 
Non mi va di passarci più volte quando ho già dato un modo univoco di creare un nome.

 avresti enormi difficoltà a trovare un algoritmo per raggiungere il tuo obiettivo
 
in che modo non sarebbe univoco?
 
la stringa " - " esiste solo tra autore e anno e tra anno e nome del libro. Se il libro ha per qualche motivo " - " nel titolo comunque gli ho detto di prendere solo le prime due istanze della stringa e poi tutto il resto finisce nel titolo.
 
come fa a non essere univoco?

 nell'ultimo post si è così espresso:

Non ci fare caso, ho detto una minchiata, si vede che non ero ancora
del tutto sveglio :)


 quello che gli passo.
 
http://pastebin.com/LxVTJ9da
 
 
salvalo come "procpdf.vbs" poi modifica il codice di "ExecFileCmd" (un
qulsiasi editor di testo andrà bene) per passare la linea comando
corretta; a questo punto, per avviarlo, ti basterà lanciare al prompt
 
cscript procpdf.vbs x:\yyy
 
dove "x:\yyy" è la cartella da elaborare; lo script elaborerà tutti i
pdf presenti nella cartella ed in tutte le sottocartelle della stessa
 
ciao
 

 cscript procpdf.vbs x:\yyy
 
non è quello che avevo chiesto, ma grazie :)


chiarifico meglio:
Ti ringrazio, perché questo risolve il problema originario, ma volevo anche capire dove è che sbagliavo per non rifare lo stesso errore in futuro.



risposta breve; sbagliavi nel tentare di usare un "linguaggio" non
progettato per compiti complessi come questo :) 
 
 

Ho ottimizzato l'uso dei cicli for. Farne troppi uno dentro l'altro incasinava tutto. Ora funziona.
 
@echo off
prompt $T$_$P$G
SETLOCAL ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%A in ('dir /b *.pdf') do (
	SET yeah=%%~nA
	for /F "tokens=1,2,* delims=§" %%R in ("!yeah: - =§!") do (
	SET ohyeah=%%T
	echo Autore: %%R
	echo Anno: %%S
	echo Titolo: !ohyeah:§= - !
	BeCyPDFMetaEdit "%%~fA" -s -d 2 -T "%%R" -S " " -A "!ohyeah:§= - !" -R " " -P " " -K " " -C auto -M auto -X 1 -PL 3 -PM 1 -Pm 1 -HT 0 -HM 0 -HW 0 -CW 0 -FW 0 -DDT 1
  )
)
pause

 progettato per compiti complessi come questo :)
 
"vorrei due mele."
"eccole un chilo di pere."
"ma ho chiesto due mele."
"Vedrà che queste hanno un sapore migliore."
 
Comunque alla fine ho risolto.
 
Mi sono autorisposto al messaggio iniziale con il listato corretto.

 "Vedrà che queste hanno un sapore migliore."
 
più che altro direi che hai fatto una torta di mele usando delle pere
 
de gustibus...