Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
* Rinominare più file da lista txt
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
Max433
Mortale devoto
Mortale devoto


Registrato: 23/06/07 12:30
Messaggi: 10

MessaggioInviato: 23 Giu 2007 12:49    Oggetto: * Rinominare più file da lista txt Rispondi citando

Salve Smile

Cerco di esprimere meglio quello che ho riassunto nel titolo.

Io ho un programma che mi dà come output dei file con semplice numero progressivo, tipo 0000001, 0000002 e così via. Ho la necessità di rinominarli tutti, seguendo l'ordine di un file di testo, dove uno per riga vi sono i nomi da attribuire ai file.
Vista la mole di file vorrei automatizzare la cosa, ma avendo scarsa se non assente conoscenza nel campo chiedo a voi se possibile, come quando dove perchè. Very Happy
Pensavo a una cosa semplice come un bat, ma forse è troppo per lui.

Grazie a tutti in ogni caso, ciao. Ciao
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 25 Giu 2007 10:45    Oggetto: Re: Rinominare più file da lista txt Rispondi citando

Max433 ha scritto:
Io ho un programma che mi dà come output dei file con semplice numero progressivo, tipo 0000001, 0000002 e così via. Ho la necessità di rinominarli tutti, seguendo l'ordine di un file di testo, dove uno per riga vi sono i nomi da attribuire ai file.

Pensavo a una cosa semplice come un bat, ma forse è troppo per lui.


... mica vero Wink

in pratica ti serve un ciclo FOR che prenda una riga per volta dal tuo file di testo e rinomini il file corrispondente...

nel modo più semplice qualcosa del tipo:

Codice:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set cnt=1
for /F "tokens=* delims=:" %i IN ('type listanomi.txt') DO (
set cnt=000000%cnt%
set cnt=%cnt:~-7%
ren %cnt% %i
set /A cnt=%cnt%+1
)


dovrebbe funzionare. mancano le estensioni dei file, la cartella in cui si trovano ma direi che sono piccole modifiche Smile

edit: avevo dimenticato la setlocal...
Top
Profilo Invia messaggio privato HomePage
Max433
Mortale devoto
Mortale devoto


Registrato: 23/06/07 12:30
Messaggi: 10

MessaggioInviato: 25 Giu 2007 17:36    Oggetto: Rispondi citando

Azz, non mi aspettavo una risposta così veloce e anche pronta all'uso!

Ovviamente cercando di completarlo con le piccole modifiche, ho sbagliato qualcosa...
potresti mica fornirmi un esempio completo di estensione e directory a tuo piacimento? Confused
Io ho provato a cambiare listanomi col nome del file di testo appunto, estensione dopo tokens e dir ovunque Razz solo danni..

Se il numero di caratteri dopo il rename è diverso dall'originale dà mica problemi? me lo chiedevo per via della riga con gli '0'.

Grazie, ciao Smile
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 26 Giu 2007 10:16    Oggetto: Rispondi citando

Max433 ha scritto:
potresti mica fornirmi un esempio completo di estensione e directory a tuo piacimento? Confused


basta cambiare la riga della rename... tipo in:

Codice:
ren C:\folder\%cnt%.dat %i


così rinomini i file *.dat della cartella "folder"...

Max433 ha scritto:
Se il numero di caratteri dopo il rename è diverso dall'originale dà mica problemi? me lo chiedevo per via della riga con gli '0'.


sì, nel bat sopra ho solo fatto il caso che il nome sia composto da 7 cifre...

descrivimi che errori ti dà... Rolling Eyes
Top
Profilo Invia messaggio privato HomePage
Max433
Mortale devoto
Mortale devoto


Registrato: 23/06/07 12:30
Messaggi: 10

MessaggioInviato: 26 Giu 2007 11:39    Oggetto: Rispondi citando

Niente, nessun errore semplicemente non accade nulla. Embarassed

Citazione:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set cnt=1
for /F "tokens=* delims=:" %i IN ('type C:\lista.txt') DO (
set cnt=000000%cnt%
set cnt=%cnt:~-7%
ren C:\test\%cnt%.tif %i
set /A cnt=%cnt%+1
)


Per la precisione del numero di caratteri, faccio un esempio chiaro e esattamente come servon a me. All'inizio l'avevo messo come info minima non pensando fosse troppo influente.

Originale Da ren

00000001 215477235_05
00000002 646174643_01
00000054 132415761_13


Vi sono quindi più caratteri dalla partenza. Scusa ancora e grazie del disturbo.

Ciao Ciao
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 26 Giu 2007 13:49    Oggetto: Rispondi citando

ok, quindi il tuo file di testo contiene sia il nome vecchio ed il nome nuovo per ogni riga? Oppure il tuo file di testo ha solo i nomi nuovi, tipo

Codice:
215477235_05
646174643_01
132415761_13


?

Se hai solo i nuovi, allora il bat funziona a patto che modifichi le due righe

Codice:
set cnt=000000%cnt%
set cnt=%cnt:~-7%


in

Codice:
set cnt=0000000%cnt%
set cnt=%cnt:~-8%


perchè vedo che il nome ha 8 caratteri... Rolling Eyes
Top
Profilo Invia messaggio privato HomePage
Max433
Mortale devoto
Mortale devoto


Registrato: 23/06/07 12:30
Messaggi: 10

MessaggioInviato: 26 Giu 2007 14:41    Oggetto: Rispondi citando

Il txt contiene solo i nuovi come nel tuo quote.
Vista la questione del numero avevo aggiunto uno degli zeri, non modificato il 7 Laughing Adesso ho modificato le due righe come da te detto.
Adesso mi dice i non atteso.
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 26 Giu 2007 15:48    Oggetto: Rispondi citando

facciamo così: sopra la riga della ren metti questa:

Codice:
echo Rinomino: C:\test\%cnt%.tif in: %i


e vediamo cosa dice prima dell'errore "i non atteso"... Confused
Top
Profilo Invia messaggio privato HomePage
Max433
Mortale devoto
Mortale devoto


Registrato: 23/06/07 12:30
Messaggi: 10

MessaggioInviato: 26 Giu 2007 16:02    Oggetto: Rispondi citando

Rimane tutto invariato. Se mi dici che a te funziona, la cosa si fà strana Shocked

Tra un rinomina e l'altro refresho il forum, cosa non si fà per i crampi alla mano Rolling
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 27 Giu 2007 15:16    Oggetto: Rispondi citando

Max433 ha scritto:
Rimane tutto invariato. Se mi dici che a te funziona, la cosa si fà strana Shocked


io non l'ho mica provato... Rolling Eyes

comunque dovrebbe almeno scriverti sullo schermo frasi tipo

il programma ha scritto:
Rinomino: C:\test\00000000.tif in: 457834634_01


ad esempio...
Top
Profilo Invia messaggio privato HomePage
Max433
Mortale devoto
Mortale devoto


Registrato: 23/06/07 12:30
Messaggi: 10

MessaggioInviato: 27 Giu 2007 18:03    Oggetto: Rispondi citando

Da come ne parlavi sembrava na certezza matematica, sorry. Razz

Io stò provando con il bat e il txt in C:\ e i file .tif in C:\test. 20 file come altrettanti ne son segnati nel txt, numero progressivo 8 cifre come base.

Con questo bat:
Codice:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set cnt=1
for /F "tokens=* delims=:" %i IN ('type C:\lista.txt') DO (
set cnt=0000000%cnt%
set cnt=%cnt:~-8%
ren C:\test\%cnt%.tif %i
set /A cnt=%cnt%+1
)

Ricevo:
C:\>ren.bat
\lista.txt') non atteso.


Con quest'altro, con il solo nomefile.txt:
Codice:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set cnt=1
for /F "tokens=* delims=:" %i IN ('type lista.txt') DO (
set cnt=0000000%cnt%
set cnt=%cnt:~-8%
ren C:\test\%cnt%.tif %i
set /A cnt=%cnt%+1
)

Ricevo:
C:\>ren.bat
i non atteso.


Poi in maniera malsana ho cambiato %i in %%i e almeno mi riporta
C:\>ren.bat
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.
Sintassi del comando errata.


20 volte, come i file...

Non sò se o cosa voglia dire, e purtroppo non sò come poterti aiutare a capire l'inghippo. Sad
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 27 Giu 2007 18:30    Oggetto: Rispondi citando

e invece mi hai proprio suggerito l'errore Very Happy

%i deve essere sostituito con %%i , sia nella riga del FOR sia nella riga della REN...

in ogni caso aggiugi la ECHO come ti dicevo qualche post sopra... così vediamo se ci sono altri errori nella sintassi della REN ...

e forse devi ancora aggiungere l'estensione alla fine della REN, tipo

Codice:
ren C:\test\%cnt%.tif %%i.tif


altrimenti perdi il .tif al fondo... Rolling Eyes
Top
Profilo Invia messaggio privato HomePage
Max433
Mortale devoto
Mortale devoto


Registrato: 23/06/07 12:30
Messaggi: 10

MessaggioInviato: 27 Giu 2007 18:45    Oggetto: Rispondi citando

Spunta qualcosa Smile
Codice:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set cnt=1
for /F "tokens=* delims=:" %%i IN ('type lista.txt') DO (
set cnt=0000000%cnt%
set cnt=%cnt:~-8%
echo Rinomino: C:\test\%cnt%.tif in: %%i.tif
ren C:\test\%cnt%.tif %%i.tif
set /A cnt=%cnt%+1
)


C:\>ren.bat
Rinomino: C:\test\1.tif in: 060700891_01.tif
Sintassi del comando errata.
Rinomino: C:\test\1.tif in: 070800012_05.tif
Sintassi del comando errata.
Rinomino: C:\test\1.tif in: 067200000_09.tif
Sintassi del comando errata.
Rinomino: C:\test\1.tif in: 135431313_12.tif
Sintassi del comando errata.
Rinomino: C:\test\1.tif in: 123457436_45.tif
Sintassi del comando errata.
etc etc...


EDIT

ho modificato set cnt=1 con set cnt=* e succede questo

Rinomino: C:\test\*.tif in: 060700891_01.tif
Nome duplicato o impossibile
trovare il file.
Nome duplicato o impossibile
trovare il file.
Nome duplicato o impossibile
trovare il file.
Nome duplicato o impossibile
trovare il file.
Operando mancante


I file sembrano rinominati correttamente, (proverò con delle copie dei file reali, adesso son fittizi e non ho riscontro), non mi sembra comunque troppo corretto Very Happy
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 28 Giu 2007 09:04    Oggetto: Rispondi citando

Max433 ha scritto:
Spunta qualcosa Smile


ok, in pratica fallisce l'incremento. allora usiamo 2 variabili

Codice:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set conta=1
for /F "tokens=* delims=:" %%i IN ('type lista.txt') DO (
set cnt=0000000%conta%
set cnt=%cnt:~-8%
echo Rinomino: C:\test\%cnt%.tif in: %%i.tif
ren C:\test\%cnt%.tif %%i.tif
set /A conta=%conta%+1
)


così "conta" farà 1, 2, 3, 4... e cnt farà 00000001, 00000002, 00000003, 00000004...

vediamo se abbiamo finito Smile
Top
Profilo Invia messaggio privato HomePage
Max433
Mortale devoto
Mortale devoto


Registrato: 23/06/07 12:30
Messaggi: 10

MessaggioInviato: 28 Giu 2007 13:33    Oggetto: Rispondi citando

Niente.

C:\>ren.bat
Rinomino: C:\test\.tif in: 060700891_01.tif
Impossibile trovare il file specificato.
Rinomino: C:\test\.tif in: 070800012_05.tif

Comunque ho testato per bene la versione cnt=*, anche in diversi ambiti, e funziona correttamente. Segue l'ordine e non mi son trovato file non rinominati o sbagliati. Terrei sta versione così ti evito altri sbattimenti, salvo che mi illumini di quache possibile problema. Razz
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 28 Giu 2007 15:05    Oggetto: Rispondi citando

ho trovato ancora un errore: poi dovrei aver finito davvero:

Codice:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set conta=1
for /F "tokens=* delims=:" %%i IN ('type lista.txt') DO (
set cnt=0000000!conta!
set cnt=!cnt:~-8!
echo Rinomino: C:\test\!cnt!.tif in: %%i.tif
ren C:\test\!cnt!.tif %%i.tif
set /A conta=!conta!+1
)


... ovvero ho dimenticato che nella espansione ritardata delle varibili devo usare il ! invece del % per le variabili d'ambiente (ma non per quelle del FOR...)
Top
Profilo Invia messaggio privato HomePage
Max433
Mortale devoto
Mortale devoto


Registrato: 23/06/07 12:30
Messaggi: 10

MessaggioInviato: 28 Giu 2007 17:28    Oggetto: Rispondi citando

Un'epopea Surprised

C:\>ren.bat
Rinomino: C:\test\0000001 .tif in: 060700891_01.tif
Sintassi del comando errata.

Intanto imparo qualcosa. Wink
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 29 Giu 2007 11:51    Oggetto: Rispondi citando

Max433 ha scritto:
Un'epopea Surprised


oppure un'impresa epica Wink


Max433 ha scritto:
Rinomino: C:\test\0000001 .tif in: 060700891_01.tif
Sintassi del comando errata.


questo è facile: copiando ed incollando dal forum al file di testo ti sei portato dietro degli "spazi" alla fine delle righe: rimuovili tutti Smile
Top
Profilo Invia messaggio privato HomePage
Max433
Mortale devoto
Mortale devoto


Registrato: 23/06/07 12:30
Messaggi: 10

MessaggioInviato: 29 Giu 2007 15:00    Oggetto: Rispondi citando

Azz, ne avevo tolti, qualcosa m'è scappato e pensavo a chissà cos'altro perchè mancava uno zero, invece tutto perfetto adesso.

Grazie davvero, impresa finita definitivamente!

Ciao Smile
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 29 Giu 2007 15:12    Oggetto: Rispondi

Max433 ha scritto:
Azz, ne avevo tolti, qualcosa m'è scappato e pensavo a chissà cos'altro perchè mancava uno zero, invece tutto perfetto adesso.


meno male, incominciavo (solo? Wink ) a fare brutta figura... Rolling Eyes
Top
Profilo Invia messaggio privato HomePage
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Vai a 1, 2  Successivo
Pagina 1 di 2

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi