PDA

View Full Version : Modifica nome file con data


alessiogian
21-07-2008, 13:52
Ciao a tutti,

per lavoro ho bisogno ogni mese di dover rinominare oltre 500 file dislocati in diverse cartelle.

Ilnome del file e' del tipo "pippo 0608.xls" da rinominare in "pippo 0708.xls" (quindi con il cambio data per il mese di riferimento).

Ho provato a dare da dos (entrando nella cartella specifica) il comando:

ren *0608.xls *0708.xls

Ma il problema e' che il nuovo file viene rinominato in "pippo 060708.xls"

Dove sbaglio? Esiste un modo per rinominarlo in "pippo 0708.xls"?

Ciao e grazie

alessiogian
21-07-2008, 15:45
Ho risolto rinominando i vari file in "pippo_0608.xls"

in questo modo cambia correttamente l'ultima parte dell'estensione.

Adesso vorrei creare un file batch con i vari percorsi che mi chieda come voglio trasformarlo

Nel senso, mi chiede quale parte deve essere modificata (0608.xls) e in quale (0708.xls)

non so se sono stato chiaro

ciao

Khronos
21-07-2008, 18:52
una volta ero bravo in batch, ora so darti solo le grandi linee...
:inizio
ECHO Ridenominazione guidata lista di file in %~f1
ECHO ---------------------------------
ECHO Opzioni disponibili:
ECHO.
ECHO 1)Rinominare abcde.*
ECHO 2)Rinominare *.abc
ECHO 3)Rinominare *abc.*
ECHO 4)Rinominare abc*.*
ECHO.
ECHO.
@ECHO off
set scelta=
set /p scelta=Specificate l'opzione desiderata e premete INVIO:
if not '%scelta%'=='' set scelta=%scelta:~0,1%
if '%scelta%'=='1' goto rin1
if '%scelta%'=='2' goto rin2
if '%scelta%'=='3' goto rin3
if '%scelta%'=='4' goto rin4
ECHO.
ECHO "%scelta%" non e' un numero di opzione valido, riprova.
ECHO.
goto inizio
:rin1
ECHO.
ECHO Rinominare abcde.*
ECHO.
set originale=
set /p originale=Digita la stringa dei file originali e premi INVIO:
set modificare=
set /p modificare=Digita la stringa di modifica e premi INVIO:
ren %originale%.* %modificare%.*
goto end
:rin2
ECHO.
ECHO Rinominare *.abc
ECHO.
set originale=
set /p originale=Digita l'estensione originale e premi INVIO:
set modificare=
set /p modificare=Digita l'estensione modificata e premi INVIO:
ren *.%originale% *.%modificare%
goto end
:rin3
ECHO.
ECHO Rinominare *abcde.*
ECHO.
set originale=
set /p originale=Digita la stringa dei file originali e premi INVIO:
set modificare=
set /p modificare=Digita la stringa di modifica e premi INVIO:
ren *%originale%.* *%modificare%.*
goto end
:rin4
ECHO.
ECHO Rinominare abcde*.*
ECHO.
set originale=
set /p originale=Digita la stringa dei file originali e premi INVIO:
set modificare=
set /p modificare=Digita la stringa di modifica e premi INVIO:
ren %originale%*.* %modificare%*.*
:end


%~f1, e tutti gli altri, sono variabili "predefinite by M$ per indicare nome cartella del momento, nome files, eccetera eccetera.
trovi tutto cercando "comandi batch" o "sintassi batch" o "variabili batch" su google, e aprendo i link che puntano a siti M$ con tutte le liste.

set variabile=
set /p variabile=
è valido per UNA variabile INTEGER con UNA cifra.
non so se vada anche per le stringhe, non credo proprio.
magari alla fine (sotto :end)puoi cacciare anche un
dir /p
per controllare immediatamente il risultato dell'operazione.
cerca.
ciao

alessiogian
22-07-2008, 08:51
Sono abbastanza nuovo alla creazione dei file batch.

Grazie per il file, posso sempre usarlo come esempio.

Sarebbe possibile creare un file che mi chieda:

1) In quale cartella modificare il nome dei file.

ad esempio, se il path é sempre C:\Documenti\Pippo\xxxxx\Gruppo A\ dove xxxx é la viariabile (che puo' essere 08 Agosto 2008 oppure 09 Settembre 2008), sarebbe possibile fare in modo che il file mi chieda che valore debba avere xxxxx?

2) Quale nome modificare e quale assegnare.

nel senso, prendiamo il caso che io voglia modificare il file pippo_0708.xls in pippo _0808.xls. Dando il semplice comando rename *_0708.xls *_0808.xls lui mi rinomina tutti ifile nella cartella che hanno nel nome _0708.xls

Ora se io volessi cambiare il nome da _0808.xls a _0908.xls senza dover riscrivere per forza il file......sarebbe possibile creare un file che mi chieda quale estensione cambiare e con cosa?

Non so se sono riesco ad essere chiaro su cio' che vorrei fare.

Ciao e grazie

Khronos
22-07-2008, 09:52
tieni conto che "creazione di file batch" equivale semplicemente a impilare comandi MS-DOS semplici intervallati da condizioni e/o cicli. se hai già provato a programmare qualcosina in qualsiasi linguaggio sappi che non è un'enorme difficoltà.

se tu leggi per bene il codice che ho scritto prima, è perfettamente intuibile che ti ho già dato quasi il codice per 4 possibilità:

:inizio
ECHO Ridenominazione guidata lista di file in %~f1
ECHO ---------------------------------
ECHO Opzioni disponibili:
ECHO.
ECHO 1)Rinominare abcde.*
ECHO 2)Rinominare *.abc
ECHO 3)Rinominare *abc.*
ECHO 4)Rinominare abc*.*
ECHO.
ECHO.

:inizio, e tutti gli altri riferimenti che iniziano con ":" servono al batch per passare da una parte all'altra del codice tramite "goto nome", dove nome è in ":nome".

"ECHO." scrive una riga vuota.
"ECHO ciaociao" scrive ciaociao.
quindi queste prime righe visualizzano un pò di testo sullo schermo. io te le ho messe di esempio, e come vedi ci sono già 4 "tipi" di ridenominazione possibili.

per il fatto del path,
A) devi sapere anche dove mettere il file .bat, perchè altrimenti se lo vuoi eseguire ovunque devi in windows inserirne la variabile di sistema, e non so se funzioni bene. (sono di fretta, scriverò meglio dopo)
B) semplicissimo.
se il comando da dare è
rename C:\Documenti\Pippo\xxxxx\Gruppo A\file.ext C:\Documenti\Pippo\yyyyy\Gruppo A\file.ext

semplice, converti in
rename C:\Documenti\Pippo\%cartella_orig%\Gruppo A\%file%.%ext% C:\Documenti\Pippo\%cartella_fin%\Gruppo A\%file_fin%.%ext_fin%

e giochi con le variabili nel modo in cui vuoi farlo. attento al problema della "raccolta input da tastiera" che ti ho detto prima, /p forse raccoglie solo un carattere numerico, non so, dovrei controllare anchio.

il resto del codice te lo spiego più tardi, ma se come ho detto prima cerchi in google "sintassi batch" trovi di tutto.
ciao

alessiogian
22-07-2008, 09:57
grazie per le risposte

avevo intuito che potesse servirmi (lo anche scritto), ma non sapevo come impostare le scelte.

Adesso provo a vedere cosa posso fare (anche cercando su internet), ma anche se e' un file che mi serve per il lavoro, non credo che il mio capo sia contento che "perdo tempo" :D

Attendo anche le tue spiegazioni (se puoi)

Ciao e grazie

Khronos
22-07-2008, 10:39
fermo. la fretta era cattiva consigliera.
:D
ti spiego una scelta passo passo.

:inizio
ECHO Ridenominazione guidata lista di file in %~f1
ECHO ---------------------------------
ECHO Opzioni disponibili:
ECHO.
ECHO 1)Rinominare abcde.*
ECHO 2)Rinominare *.abc
ECHO 3)Rinominare *abc.*
ECHO 4)Rinominare abc*.*
ECHO 5)Rinominare abcde.xyz in X:\path\
ECHO.
ECHO.
@ECHO off


la tua scelta sarà 5, ad esempio, quindi:

set scelta=
set /p scelta=Specificate l'opzione desiderata e premete INVIO:
if not '%scelta%'=='' set scelta=%scelta:~0,1%
if '%scelta%'=='1' goto rin1
if '%scelta%'=='2' goto rin2
if '%scelta%'=='3' goto rin3
if '%scelta%'=='4' goto rin4
if '%scelta%'=='5' goto rin5

il 5 farà scattare "rin5" e
ECHO.
ECHO "%scelta%" non e' un numero di opzione valido, riprova.
ECHO.
goto inizio
non avrà riscontro.

cerchiamo :rin5 .

:rin1..........
.....
.
......
:rin2......
...
..
.
.
.
.
:rin3
.....
.
......
.
..:rin4
........
.
....
..
:rin5

eccolo. il batch continua li.
:rin5
ECHO.
ECHO Rinominare abcde.xyz in X:\path\
ECHO.
set cartella=
set /p cartella=Digita il nome della cartella e premi INVIO:
ECHO.
set file=
set /p file=Digita la stringa file originale e premi INVIO:
ECHO.
set ext=
set /p file=Digita la stringa estensione originale e premi INVIO:
ECHO.
set file_new=
set /p file=Digita la stringa file modificata e premi INVIO:
ECHO.
set ext_new=
set /p file=Digita la stringa estensione modificata e premi INVIO:
ECHO.

niente di più facile.
dichiari le variabili e chiedi di riempirle. (per l'ultima volta, ocio al "set /p" che ho sparato a caso in questo ambito. va benissimo con "scelta" all'inizio, ma qui con stringhe di caratteri dovrebbe esserci un'altra lettera.)
la variabile cartella può contenere di tutto, a seconda dei tuoi comodi.
la semplice xxxx, oppure il path completo, C:\affdf\faadada\xxx\dfdfas\xxx.
Io ho presupposto che sia solo xxxx.
ATTENTISSIMO A
Gruppo A
siamo in dos 7 o 8, non nei vecchi.
nei vecchi lo spazio non era neanche ammesso.
e c'era il limite di 8.3 caratteri.
cartelle con nome più grosso vengono trinciate in docume~1 nella vecchia notazione (questa è ad esempio documents and settings).
altrimenti, se si vuole scrivere nella nuova, in presenza di spazi bisogna mettere L'INTERO INDIRIZZO TRA VIRGOLETTE
"C:\asdasdsas asfafa\qwe zxc\errerrqereqr\134.523"
ora vengono i comandi finali.
Mettiamo che tu, col tuo batch, stia in
X:\cartella_del_batch\
quindi dovrai spostarti materialmente di la, per fare tutti i tuoi comandi.
puoi farlo in 2 modi, o direttamente nel "rename" o separatamente dal "rename".
insieme al rename:

ren "C:\ciao\pippo\%cartella%\Gruppo A\%file%.%ext%" "C:\ciao\pippo\%cartella%\Gruppo A\%file_new%.%ext_new%"
goto end
separato dal rename:
cd "C:\ciao\pippo\%cartella%\Gruppo A\"
ren %file%.%ext% %file_new%.%ext_new%
goto end

in entrambi i casi, "goto end" manda a :end, e io, come ti ho suggerito prima, ci metterei un
:end
dir /p
cd X:\cartella_del_batch
per controllare il risultato, e poi magari per ritornare a dov'eri prima, nella cartella del batch.
se hai usato il metodo "insieme al rename, prima di fare "dir /p" devi rientrare in "X:\indirizzo dove hai lavorato i files", altrimenti ci sei già.

il codice completo di tutta sta barcamenata uscirebbe così:

:inizio
ECHO Ridenominazione guidata lista di file in %~f1
ECHO ---------------------------------
ECHO Opzioni disponibili:
ECHO.
ECHO 1)Rinominare abcde.*
ECHO 2)Rinominare *.abc
ECHO 3)Rinominare *abc.*
ECHO 4)Rinominare abc*.*
ECHO 5)Rinominare abcde.xyz in X:\path\
ECHO.
ECHO.
@ECHO off
set scelta=
set /p scelta=Specificate l'opzione desiderata e premete INVIO:
if not '%scelta%'=='' set scelta=%scelta:~0,1%
if '%scelta%'=='1' goto rin1
if '%scelta%'=='2' goto rin2
if '%scelta%'=='3' goto rin3
if '%scelta%'=='4' goto rin4
if '%scelta%'=='5' goto rin5
ECHO.
ECHO "%scelta%" non e' un numero di opzione valido, riprova.
ECHO.
goto inizio
:rin1..........
.....
.
......
:rin2......
...
..
.
.
.
.
:rin3
.....
.
......
.
..:rin4
........
.
....
..
:rin5
ECHO.
ECHO Rinominare abcde.xyz in X:\path\
ECHO.
set cartella=
set /p cartella=Digita il nome della cartella e premi INVIO:
ECHO.
set file=
set /p file=Digita la stringa file originale e premi INVIO:
ECHO.
set ext=
set /p file=Digita la stringa estensione originale e premi INVIO:
ECHO.
set file_new=
set /p file=Digita la stringa file modificata e premi INVIO:
ECHO.
set ext_new=
set /p file=Digita la stringa estensione modificata e premi INVIO:
ECHO.
cd "C:\ciao\pippo\%cartella%\Gruppo A\"
ren %file%.%ext% %file_new%.%ext_new%
goto end
:end
dir /p
cd X:\cartella_del_batch