Precedente :: Successivo |
Autore |
Messaggio |
Max433 Mortale devoto
Registrato: 23/06/07 12:30 Messaggi: 10
|
Inviato: 23 Giu 2007 12:49 Oggetto: * Rinominare più file da lista txt |
|
|
Salve
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è.
Pensavo a una cosa semplice come un bat, ma forse è troppo per lui.
Grazie a tutti in ogni caso, ciao. |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 25 Giu 2007 10:45 Oggetto: Re: Rinominare più file da lista txt |
|
|
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
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
edit: avevo dimenticato la setlocal... |
|
Top |
|
|
Max433 Mortale devoto
Registrato: 23/06/07 12:30 Messaggi: 10
|
Inviato: 25 Giu 2007 17:36 Oggetto: |
|
|
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?
Io ho provato a cambiare listanomi col nome del file di testo appunto, estensione dopo tokens e dir ovunque 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 |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 26 Giu 2007 10:16 Oggetto: |
|
|
Max433 ha scritto: | potresti mica fornirmi un esempio completo di estensione e directory a tuo piacimento? |
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à... |
|
Top |
|
|
Max433 Mortale devoto
Registrato: 23/06/07 12:30 Messaggi: 10
|
Inviato: 26 Giu 2007 11:39 Oggetto: |
|
|
Niente, nessun errore semplicemente non accade nulla.
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 |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 26 Giu 2007 13:49 Oggetto: |
|
|
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... |
|
Top |
|
|
Max433 Mortale devoto
Registrato: 23/06/07 12:30 Messaggi: 10
|
Inviato: 26 Giu 2007 14:41 Oggetto: |
|
|
Il txt contiene solo i nuovi come nel tuo quote.
Vista la questione del numero avevo aggiunto uno degli zeri, non modificato il 7 Adesso ho modificato le due righe come da te detto.
Adesso mi dice i non atteso. |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 26 Giu 2007 15:48 Oggetto: |
|
|
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"... |
|
Top |
|
|
Max433 Mortale devoto
Registrato: 23/06/07 12:30 Messaggi: 10
|
Inviato: 26 Giu 2007 16:02 Oggetto: |
|
|
Rimane tutto invariato. Se mi dici che a te funziona, la cosa si fà strana
Tra un rinomina e l'altro refresho il forum, cosa non si fà per i crampi alla mano |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 27 Giu 2007 15:16 Oggetto: |
|
|
Max433 ha scritto: | Rimane tutto invariato. Se mi dici che a te funziona, la cosa si fà strana |
io non l'ho mica provato...
comunque dovrebbe almeno scriverti sullo schermo frasi tipo
il programma ha scritto: | Rinomino: C:\test\00000000.tif in: 457834634_01 |
ad esempio... |
|
Top |
|
|
Max433 Mortale devoto
Registrato: 23/06/07 12:30 Messaggi: 10
|
Inviato: 27 Giu 2007 18:03 Oggetto: |
|
|
Da come ne parlavi sembrava na certezza matematica, sorry.
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. |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 27 Giu 2007 18:30 Oggetto: |
|
|
e invece mi hai proprio suggerito l'errore
%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... |
|
Top |
|
|
Max433 Mortale devoto
Registrato: 23/06/07 12:30 Messaggi: 10
|
Inviato: 27 Giu 2007 18:45 Oggetto: |
|
|
Spunta qualcosa
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 |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 28 Giu 2007 09:04 Oggetto: |
|
|
Max433 ha scritto: | Spunta qualcosa |
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 |
|
Top |
|
|
Max433 Mortale devoto
Registrato: 23/06/07 12:30 Messaggi: 10
|
Inviato: 28 Giu 2007 13:33 Oggetto: |
|
|
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. |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 28 Giu 2007 15:05 Oggetto: |
|
|
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 |
|
|
Max433 Mortale devoto
Registrato: 23/06/07 12:30 Messaggi: 10
|
Inviato: 28 Giu 2007 17:28 Oggetto: |
|
|
Un'epopea
C:\>ren.bat
Rinomino: C:\test\0000001 .tif in: 060700891_01.tif
Sintassi del comando errata.
Intanto imparo qualcosa. |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 29 Giu 2007 11:51 Oggetto: |
|
|
Max433 ha scritto: | Un'epopea |
oppure un'impresa epica
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 |
|
Top |
|
|
Max433 Mortale devoto
Registrato: 23/06/07 12:30 Messaggi: 10
|
Inviato: 29 Giu 2007 15:00 Oggetto: |
|
|
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 |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 29 Giu 2007 15:12 Oggetto: |
|
|
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? ) a fare brutta figura... |
|
Top |
|
|
|