Proseguendo gli “studi” su PowerShell in questo articolo volevo soffermarmi sui vari cmdlet che permettono di gestire file e cartelle, quindi creazione, cancellazione, rinomina e spostamento. Vediamo come utilizzarli.
Convenzioni
Per non doverle rispiegare ogni volta, riassumo qui alcune regole da usare nei comandi:
- Le virgolette, per contenere il percorso di una cartella, vanno sempre usate quando è presente uno spazio nel nome come “D:\Articoli da fare”, non è indispensabile farlo quando il nome non ha spazi come D:\TurboLab. Per nostra scelta, o abitudine, possiamo usarle sempre, alla fine non cambia niente.
- Le opzioni, almeno le più utilizzabili, da aggiungere al cmdlet:
-verbose
serve a mostrare a video cosa ha fatto il comando.-force
serve a sovrascrivere, senza richiesta, eventuali file già presenti nella cartella destinazione che hanno lo stesso nome. Con la stessa opzione possiamo anche forzare la cancellazione di file nascosti o in sola lettura.-recurse
permettere di copiare tutto il contenuto della cartella.-confirm
ferma l’esecuzione dello script sino a quando l’utente non conferma di poter procedere.
- Il carattere jolly * permette di copiare tutti i file che hanno un nome qualsiasi e estensione .zip (per esempio), quindi *.zip.
Creare/cancellare cartella (New-Item e Remove-Item)
Per creare una nuova cartella bisogna utilizzare questo comando New-Item -Path “d:\TurboLab” -ItemType Directory
, invece se la vogliamo cancellare dobbiamo usare Remove-Item d:\TurboLab
.
Se la cartella da cancellare contiene degli altri elementi ci chiederà se vogliamo eliminarli oppure dobbiamo aggiungere l’opzione -recurse al comando che diventerà quindi Remove-Item D:\TurboLab -recurse
.
Se invece vogliamo cancellare tutti i file .zip che si trovano nella cartella, il comando diventa Remove-Item “D:\TurboLab\Articoli da fare\*.zip”
, per eliminare un singolo file basta indicare il suo nome completo.
Un esempio pratico di Remove-Item è con i file contenuti nella cartella c:\windows\temp, avevo una serie di file exe, tmp e log non cancellabili normalmente da Windows, aggiungendo l’opzione -force li ha eliminati praticamente tutti tranne i due che erano in uso.
Se invece vogliamo creare un file possiamo usare il comando New-Item -Path “D:\TurboLab.txt” -ItemType File
, oppure la sua versione abbreviata. Alla fine il risultato non cambia viene creato sempre un file vuoto.
Invece il comando New-Item “D:\TurboLab.txt” -value “Prova inserimento testo nel file”
crea un file di testo che contiene la stringa inserita dopo l’opzione -value.
Copia (Copy-Item)
Il cmdlet Copy-Item
permette di copiare oggetti, come file o cartelle.
Il comando Copy-Item “d:\Articoli da fare” “d:\TurboLab”
copia solo la cartella principale (vuota) “d:\Articoli da fare” in “d:\TurboLab”, aggiungendo l’opzione -recurse copia tutti i file e cartelle presenti, invece -force sovrascrive, senza chiedere il permesso, eventuali file già presenti con lo stesso nome.
Comando e procedura analoga per la copia di singoli file o per gruppi di file. Se volete copiare solo alcuni file da una cartella, basta indicare il loro nome e percorso completo separandoli con una virgola Copy-Item C:\windows\temp\1.txt,C:\windows\temp\2.txt d:\TurboLab\
Spostamento (Move-Item)
Il cmdlet Move-Item
permette di spostare un file/cartella, quindi Move-Item “C:\articoli da fare” d:\TurboLab
sposta la cartella “C:\articoli da fare” dentro l’altra cartella d:\TurboLab. Invece Move-Item C:\Users\crazy.cat\AppData\Local\Temp\*.ico d:\TurboLab
sposta tutti i file .ico dentro la cartella d:\TurboLab.
Rinominare (Rename-Item)
Il cmdlet Rename-Item
permette di rinominare file o cartelle presenti nel disco fisso. Con questo comando Rename-Item -Path "d:\TurboLab" -NewName "d:\TurboProva"
cambiamo nome alla cartella, mentre in questo modo rinominiamo solo il file notepad.exe Rename-Item -Path "d:\TurboProva\notepad.exe" -NewName "d:\TurboProva\pippo.exe".
Conclusioni
Una delle cose che mi lascia perplesso di PowerShell è la possibilità di utilizzare la versione completa di un comando, con un maggior numero di opzioni, o la versione breve senza queste opzioni che alla fine non ci servono a niente. Così il comando Rename-Item -Path "d:\TurboLab" -NewName "d:\TurboProva"
può diventare Rename-Item "d:\TurboLab" "d:\TurboProva"
e il risultato è lo stesso. Questo genera sicuramente confusione nei non esperti e anche in me alle volte.
Per ulteriori riferimenti ed esempi, potete consultare le pagine Microsoft relative ai singoli cmdlet: