Share via


Script per rinominare tutti i file presenti in una cartella

Un mio amico si è trovato in questa situazione:

domanda da un milione di dollari: sai se sotto windows è possibile eliminare uno specifico carattere dando la sua posizione all'interno del file in qualche modo? Intendo caratteri che non vengono letti dai programmi che rinominano a catena...tipo simboli giapponesi o cose così...che sotto dos vengono letti come "?"... Il fatto è che devo eliminare questo carattere da 500 file,
farli uno ad uno non è cosa...

La mia risposta da bravo Windowsiano:

Se il carattere si trova solo nel nome, potresti risolvere rapidamente selezionando tutti i file, tasto destro, rinomina, e windows te li rinomina tutti dando un unico nome (quello che imposti tu) e mettendo dietro un numero progressivo

La sua controrisposta, da bravo Linuxaro:

Non si può perché windows è ancora all'età della pietra e rinomina i primi file in 1 2 3 4 etc e, avendone 500, mi trovo tutti quelli della decina da 20 a 30 (per esempio) tra i 200 e i 300, idem per tutte le altre decine che si ritrovano in mezzo alla centinaia e non dove dovrebbero essere...

A questo punto era diventata una questione di principio:

Il carattere incriminato si trova in una posizione fissa del nome del file?

Sì di solito sono il primo carattere…

Detto fatto: ecco a voi lo script che rinomina tutti i file di una cartella, togliendo il primo carattere!

 

Copia tutti e soli i file in questione dentro c:\tempfiles e assicurati di non avere altre directory che si chiamano tempfiles nel pc, poi crea un file in un'altra cartella e chiamalo script.vbs, quindi incolla queste righe (facendo tasto destro, modifica) nel file script.vbs

 

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colFiles = objWMIService. _
ExecQuery("Select * from CIM_DataFile where Path = '\\tempfiles\\'")

For Each objFile in colFiles
strnomefilecompleto = objfile.Name
arrnomefile = split(strnomefilecompleto,"\")
strnomefile = arrnomefile(2)
strnomefilenuovo = right(strnomefile,Len(strnomefile)-1)
objFile.rename("C:\tempfiles\" + strnomefilenuovo)
Next

Risposta: Credo abbia funzionato :P Devo imparare pure io il vbs… Grazie mille!