Discussione:
rinomina variabile
(troppo vecchio per rispondere)
dylan
2009-07-06 15:55:03 UTC
Permalink
Buongiorno a tutti,
premetto che leggendo molti post relativi al rinominazione sono rimasto un
po' intimorito..
Io piu' che * , ? non ho mai usato.. e per risolvere il mio problema mi sa
che non bastano.

Devo creare un file bat che mi consenta di rinominare dei file che si
chiamano es:

pippo-paperino-numero.estensione in pipponumero.estensione.

"Pippo" e "paperino" sono lettere misto numeri, variano di lunghezza e son
sempre diversi ma son sempre separati dal segno- mentre "numero" e' un
numero appunto (solitamente compreso tra 1 e 300 circa) e anche esso e'
separato con il segno-.

Ho fatto delle prove... ma non me la riesco a cavare proprio..
Con gli * e ? mi sembra effettivamente impossibile. Esiste un modo diverso?
Offro un paio di birre per un aiutino (se abitate vicino a Torino!) :-)

Dylan
gioacchino
2009-07-07 11:01:34 UTC
Permalink
Post by dylan
Devo creare un file bat che mi consenta di rinominare dei file che si
pippo-paperino-numero.estensione in pipponumero.estensione.
"Pippo" e "paperino" sono lettere misto numeri, variano di lunghezza e
son sempre diversi ma son sempre separati dal segno- mentre "numero" e'
un numero appunto (solitamente compreso tra 1 e 300 circa) e anche esso
e' separato con il segno-.
Prova con la seguente espressione regolare:
^((?:\w)+)\-((?:\w)+)\-((?:\d)+)\.((?:\w)+)$
e sostituisci la riga con
ren "\0" "\1\3.\4"

Però hai bisogno di un programma che supporti le ER come il sed.
Ammesso che tu abbia sed e un file con la lista di tutti i file che vuoi
rinominare puoi passare a sed qualcosa del genere:
sed -e 's/^((?:\w)+)\-((?:\w)+)\-((?:\d)+)\.((?:\w)+)$/ren \0 \1\3.\4/'
Ovviamente devi aggiungere pesantemente caratteri di escape che cambiano
da sistema a sistema (la ER l'ho provata con kwrite su linux e non da
terminale).
gioacchino
2009-07-07 13:59:26 UTC
Permalink
Post by gioacchino
Ovviamente devi aggiungere pesantemente caratteri di escape che cambiano
da sistema a sistema (la ER l'ho provata con kwrite su linux e non da
terminale).
Ad esempio in questo modo
sed -e 's/^\(\w\+\)\-\(\w\+\)\-\([0-9]\+\)\.\(\w\+\)$/ren \0 \1\3.\4/'
dylan
2009-07-07 17:35:33 UTC
Permalink
Post by gioacchino
Post by gioacchino
terminale).
Ad esempio in questo modo
sed -e 's/^\(\w\+\)\-\(\w\+\)\-\([0-9]\+\)\.\(\w\+\)$/ren \0 \1\3.\4/'
Ciao,
che dire.. intanto grazie.
Mi hai spaventato. Purtroppo le mie basi di dos , mi rendo conto, sono a
raso terra. Ti ringrazio per la risposta ma ad essere sincero penso che non
ne verro' a capo.. Mi sembra di sentir parlare un arabo incazzato :-).

L'unica cosa che potrei provare a fare e' copiare la stringa

sed -e 's/^\(\w\+\)\-\(\w\+\)\-\([0-9]\+\)\.\(\w\+\)$/ren \0 \1\3.\4/'

nell'ultima riga del file.
ER, sed ecc non ho la piu' pallida idea di cosa siano..
Ho provato da riga dos a eseguire un bat con dentro la tua espressione e mi
dice :" "sed" non e' riconosciuto come comando interno o esterno, un progr.
eseguibile o un file batch."


In pratica non ho liste di files. I file vengono generati da un sistema cam
e vengono nominati dal sistema appunto secondo una sua logica. Gia con un
batch rinomino i file da
minni.pippo-paperino.estensione in pippo-paperino-numero.nuovaestensione ma
dovrei ottenere pipponumero.nuovaestensione. Nel caso specifico minni e'
una variabile, la coppia pippo-paperino e' una variabile, numero e' una
variabile. In poche parole devo estrarre da pippo-paperino solo pippo con
dietro "numero". Quello sarebbe cio' che mi serve..
Per ora ho usato un workaround. Ho creato una variabile dove io andro' a
scrivere a mano pippo e cosi' i file mi escono pipponumero.nuovaestensione.

Ancora grazie e ciao. Per la birra fatti sentire!
Dylan
gioacchino
2009-07-07 19:11:46 UTC
Permalink
Post by dylan
Ciao,
che dire.. intanto grazie.
Prego
Post by dylan
Mi hai spaventato. Purtroppo le mie basi di dos , mi rendo conto, sono a
raso terra. Ti ringrazio per la risposta ma ad essere sincero penso che
non ne verro' a capo.. Mi sembra di sentir parlare un arabo incazzato
:-).
:-)
Post by dylan
L'unica cosa che potrei provare a fare e' copiare la stringa
sed -e 's/^\(\w\+\)\-\(\w\+\)\-\([0-9]\+\)\.\(\w\+\)$/ren \0 \1\3.\4/'
nell'ultima riga del file.
No, quella riga descrive il modello dei dati vuoi trovare nel file e non
devi aggiungerla al file.
Post by dylan
ER, sed ecc non ho la piu' pallida idea di cosa siano.. Ho provato da
riga dos a eseguire un bat con dentro la tua espressione e mi dice :"
"sed" non e' riconosciuto come comando interno o esterno, un progr.
eseguibile o un file batch."
Infatti sed non viene inserito come comando in msdos ma c'è in freedos.
Prova a cercare "sed" nel sito di freedos:
http://www.freedos.org/
Post by dylan
In pratica non ho liste di files. I file vengono generati da un sistema
cam e vengono nominati dal sistema appunto secondo una sua logica. Gia
Ti conviene creare un file con tutti i file presenti nella directory:
DIR directory_dove_ci_sono_i_file_da_rinominare /S/B > lista_del_file

Ottenuto la lista dei file la passi a sed e ti converte da:
pippo-paperino-numero.nuovaestensione
a
ren pippo-paperino-numero.nuovaestensione pipponumero.nuovaestensione
ed infine lanci il batch che ti farà la conversione.

Se vuoi provarlo ti consiglio di provare questa stringa:
sed -e 's/^\(\w\+\)\-\(\w\+\)\-\([0-9]\+\)\.\(\w\+\)$/echo \0 \1\3.\4/'
per precauzione. Se vedi che ti stampa a video quello che vuoi, allora
cambiala con questa:
sed -e 's/^\(\w\+\)\-\(\w\+\)\-\([0-9]\+\)\.\(\w\+\)$/ren \0 \1\3.\4/'
Post by dylan
Ancora grazie e ciao. Per la birra fatti sentire! Dylan
Grazie per la birra ma mi accontento di quella "virtuale".
Ciao

Continua a leggere su narkive:
Loading...