Copia-Elementi Escludendo la Cartella in PowerShell
-
Escludere Cartelle nelle Operazioni di Copia di PowerShell Utilizzando la Funzione
Get-Item
e il Parametro-Exclude
-
Escludere Cartelle nelle Operazioni di Copia di PowerShell Utilizzando
Where-Object
ePSIsContainer
- Conclusione

Nel campo della gestione dei file e dell’automazione utilizzando PowerShell, il compito di copiare file escludendo cartelle specifiche è una sfida comune ma sfumata. Questo articolo esplora due metodi efficaci per raggiungere questo obiettivo: utilizzare la funzione Get-Item
con il parametro -Exclude
e sfruttare Where-Object
con la proprietà PSIsContainer
.
Entrambi i metodi, pur servendo lo stesso scopo, affrontano il problema da angolazioni diverse e offrono vantaggi unici.
Il nostro obiettivo è fornire una comprensione completa di questi metodi, delle loro applicazioni e delle sfumature del loro utilizzo. Attraverso spiegazioni dettagliate, analisi della sintassi ed esempi pratici, miriamo a fornire sia agli utenti nuovi che a quelli esperti di PowerShell le competenze per gestire in modo efficiente i compiti di copia dei file, personalizzando i loro approcci per adattarsi ai requisiti specifici dei loro flussi di lavoro.
Escludere Cartelle nelle Operazioni di Copia di PowerShell Utilizzando la Funzione Get-Item
e il Parametro -Exclude
Possiamo usare il comando Copy-Item
per copiare i file escludendo una cartella in PowerShell. Esistono due metodi per utilizzare Copy-Item
escludendo una cartella, uno escludendo una singola cartella e l’altro escludendo più cartelle.
La sintassi per questa operazione combina Copy-Item
con Get-Item -Exclude
:
Copy-Item -Path (Get-Item -Path "sourcePath\*" -Exclude ('folderToExclude')).FullName -Destination "destinationPath" -Recurse -Force
Parametri:
Copy-Item
: Questo cmdlet copia file e directory in una nuova posizione.-Path
: Specifica il percorso degli elementi da copiare. Nel nostro caso, questo è fornito daGet-Item
.Get-Item
: Recupera gli elementi dalla posizione specificata.-Exclude
: Questo parametro inGet-Item
filtra gli elementi, in particolare i nomi di cartelle o file da escludere.('folderToExclude')
: Il nome della cartella che si desidera escludere..FullName
: Recupera il percorso completo degli elementi.-Destination
: Il percorso in cui copiare gli elementi.-Recurse
: Include i contenuti delle sottodirectory.-Force
: Costringe il comando a essere eseguito senza richiedere conferma all’utente.
Esempio di Codice:
Copy-Item -Path (Get-Item -Path "origin\*" -Exclude ('SubFolder')).FullName -Destination "destination\" -Recurse -Force
Nel nostro script, iniziamo puntando alla directory di origine (C:\origin\
) e utilizziamo Get-Item
per recuperare tutti gli elementi in essa contenuti. L’uso del simbolo asterisco (*
) qui funge da carattere jolly, rappresentando ogni elemento all’interno della directory.
Successivamente, sfruttiamo il parametro -Exclude
per esprimere la nostra intenzione di escludere una specifica sottocartella, denominata SubFolder
. L’impiego della proprietà .FullName
è fondamentale in questo contesto poiché recupera il percorso completo per ciascun elemento con cui stiamo trattando.
Dopo aver curato questo elenco, che omette deliberatamente la cartella designata, viene passato a Copy-Item
. Procediamo a definire la nostra posizione target come la directory di destinazione (C:\destination
). Per garantire un processo di copia completo, che comprende tutte le sottodirectory tranne quella che abbiamo scelto di escludere, incorporiamo il parametro -Recurse
.
Per semplificare ulteriormente il nostro processo ed evitare potenziali interruzioni, il parametro -Force
entra in gioco. Esso sopprime efficacemente eventuali prompt di sistema che potrebbero altrimenti interrompere l’operazione, in particolare quelli associati alla sovrascrittura di file esistenti nella directory di destinazione.
Cartella origin
:
Output:
Il comando sopra escluderà solo una cartella specifica. Possiamo anche escludere più cartelle semplicemente inserendo i nomi delle cartelle multiple in -Exclude()
.
Vedi il comando per escludere più cartelle:
Copy-Item -Path (Get-Item -Path "origin\*" -Exclude ('SubFolder', 'SubFolder2')).FullName -Destination "destination\" -Recurse -Force
Vedi l’output:
Escludere Cartelle nelle Operazioni di Copia di PowerShell Utilizzando Where-Object
e PSIsContainer
PowerShell fornisce un ampio set di cmdlet per la manipolazione di file e cartelle, con Copy-Item
che è un attore chiave per le operazioni di copia. Tuttavia, la sua funzionalità nativa non supporta direttamente l’esclusione di cartelle.
Per ottenere questo, utilizziamo una combinazione di Get-ChildItem
, Where-Object
e la proprietà PSIsContainer
. Questo metodo è particolarmente utile per le operazioni di copia in cui è necessario escludere le directory mantenendo i file.
La struttura dello script è la seguente:
Get-ChildItem -Path "sourcePath\" -Recurse | Where-Object { $_.PSIsContainer -notmatch 'True' } | Copy-Item -Destination "destinationPath" -Recurse -Container
Parametri:
Get-ChildItem -Path "sourcePath\" -Recurse
: Recupera tutti gli elementi (file e cartelle) dal percorso specificato, comprese le sottodirectory.Where-Object { $_.PSIsContainer -notmatch 'True' }
: Filtra tutte le directory.PSIsContainer
è una proprietà booleana che èTrue
per le directory eFalse
per i file.Copy-Item -Destination "destinationPath" -Recurse -Container
: Copia gli elementi rimanenti (file) nella destinazione.-Recurse
è usato per garantire l’attraversamento delle sottodirectory, e-Container
preserva la struttura delle directory.
Esempio di Codice:
Get-ChildItem -Path "origin\" -Recurse | Where-Object { $_.PSIsContainer -notmatch 'True' } | Copy-Item -Destination "destination\" -Recurse -Container
Nel nostro script, iniziamo raccogliendo tutti gli elementi dalla directory di origine (origin\
). Per fare ciò, utilizziamo il cmdlet Get-ChildItem
.
La vera magia avviene con il cmdlet Where-Object
, dove introduciamo un filtro per escludere specificamente le directory. Questa esclusione si basa sulla condizione $_ .PSIsContainer -notmatch 'True'
.
Questo particolare pezzo di codice è cruciale poiché effettivamente setaccia gli elementi raccolti, assicurando che solo i file (e non le directory) vengano passati attraverso la pipeline.
Successivamente, questi file filtrati vengono passati al cmdlet Copy-Item
. Il nostro comando qui è di copiare questi file nella nostra destinazione specificata (destination\
).
Un aspetto importante di questa operazione è come preserva la struttura originale delle directory nella destinazione nonostante l’esclusione delle cartelle stesse. Questo equilibrio è raggiunto attraverso l’attenta orchestrazione dei parametri -Recurse
e -Container
all’interno di Copy-Item
, garantendo che l’integrità della struttura dei file sia mantenuta, a parte le effettive cartelle.
Output:
Conclusione
In conclusione, le tecniche presentate in questo articolo — utilizzare Get-Item
con -Exclude
e Where-Object
con PSIsContainer
— offrono modi potenti e flessibili per escludere cartelle durante le operazioni di copia in PowerShell. Comprendendo e applicando questi metodi, gli utenti possono migliorare significativamente le loro capacità di gestione dei file e automazione in PowerShell.
L’approccio Get-Item
e -Exclude
è diretto e altamente efficace per escludere cartelle specifiche, mentre i metodi Where-Object
e PSIsContainer
forniscono un controllo più sfumato, particolarmente utile in scenari in cui i criteri di esclusione sono più complessi o dinamici. Entrambi i metodi dimostrano la versatilità e la potenza di PowerShell nel gestire file e directory, rendendolo uno strumento inestimabile per amministratori di sistema, sviluppatori e professionisti IT.
Armati di questa conoscenza, gli utenti possono affrontare con sicurezza una vasta gamma di compiti di copia di file, garantendo un controllo efficiente e preciso sulle loro operazioni di gestione dei file negli ambienti Windows.
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook