PDA

View Full Version : Creare directories e spostare files in automatico


tranfa
25-02-2009, 15:54
Ciao a tutti,

avete in mente un modo automatizzato (via sware specifico, o cmd DOS) per:
- leggere i nomi di files (avi) da una directory;
- creare delle sottodirectories della stessa directory con il nome di ciascuno dei files (senza l'estensione);
- spostare ciascuno dei files nella sua sottodirectory di competenza?

Cioè, una cosa che sarebbe un lavorone a mano, ma facile facile con un algoritmo.....

Ciao e grazie in anticipo..!

john_revelator
25-02-2009, 16:14
In pratica avendo ad esempio

pippo.avi
poldo.avi
pluto.avi

vorresti creare tre cartelle

pippo
poldo
pluto

e in ciascuna spostare il file corrispondente. E' giusto?

john_revelator
25-02-2009, 16:36
Io ti consiglio di usare la powershell della microsoft.
La puoi scaricare da qui

http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

nel caso non lo abbia già, per poterla installare è necessario avere il framework .net 2.0

http://www.microsoft.com/downloads/details.aspx?displaylang=it&FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5

Una volta installata la powershell, la avvii digitando da esegui powershell.
A questo punto, come faresti col classico prompt dei comandi, raggiungi la cartella che contiene i tuoi file avi ed esegui in successione questi quattro comandi:


gci *.avi | % {[io.Path]::GetFileNameWithoutExtension($_)} | % {new-Item -type directory $_}


Il comando presente qui sopra recupera l'elenco di tutti i file avi, ne estrae i nomi privi di estensione e per ciascuno crea la cartella corrispondente.

I due comandi sottostanti sono molto semplici.
Il primo assegna alla variabile $files l'elenco dei file avi e il secondo assegna alla variabile $folders l'elenco di tutte le cartelle (quelle appena create)

$files = gci *.avi
$folders =Get-ChildItem | ? {$_.psiscontainer}


foreach ($file in $files) {foreach($folder in $folders) {if([io.Path]::GetFileNameWithoutExtension($file.Name) -eq $folder) {move-item -literalpath $file.fullname -destination $folder}}}


L'ultimo comando infine cicla i file e le cartelle e quando il nome del file privo di estensione coincide con quello della cartella, lo sposta al suo interno. :)

tranfa
25-02-2009, 19:25
Grande, grazie mille....!!

Stassera provo.....e ti so dire.

tranfa
25-02-2009, 21:35
Grazie John, per due cose: mi hai risolto il problema, e mi hai fatto conoscere la PowerShell...!

Se passi da Milano, fai un fischio, che avrei piacere di bere una birra insieme !

john_revelator
25-02-2009, 22:41
Grazie John, per due cose: mi hai risolto il problema, e mi hai fatto conoscere la PowerShell...!

Se passi da Milano, fai un fischio, che avrei piacere di bere una birra insieme !

Grazie per l'invito. Noi sardi una birretta non ce la neghiamo mai. :D

P.S. Se inizi a usare la powershell non ne potrai più fare a meno. ;)