Powershell Copy-Item in modo ricorsivo ma non includere il nome della cartella


19

Questa è una domanda stupida, ma non so perché non funzioni.

Sto cercando di copiare i file da FolderA a FolderB in modo ricorsivo. Lo sto facendo:

Copy-Item -Path "C:\FolderA\" -Destination "C:\FolderB\" -recurse -Force -Verbose

Funziona benissimo, nessun problema.

Tranne il risultato in FolderB è questo:

C:\FolderB\FolderA\file.txt

Considerando che voglio che sia:

C:\FolderB\file.txt

Quale stupida cosa ovvia mi sto perdendo?


4
Non stai facendo niente di stupido, copia-oggetto è solo una PITA.
StingyJack

Risposte:


27

Il comando indica a PowerShell di copiare la cartella stessa, con tutto il suo contenuto, nella cartella di destinazione. Per copiare solo il contenuto della cartella originale, modificare il percorso come segue:

Copy-Item -Path "C:\FolderA\*" -Destination "C:\FolderB\" -recurse -Force -Verbose

Notare l'asterisco (*) dopo il nome della cartella. Ciò copierà il contenuto (comprese le sottocartelle) della cartella, ma non la cartella stessa nella cartella di destinazione.

Utilizzo del cmdlet Copia-elemento


2
Si noti che ciò non copia la struttura delle cartelle se la cartella di destinazione non esiste. Chiamare md "C:\FolderB"prima Copy-Itemsembra evitare questo problema.
zett42

Basandosi sul commento di @ zett42 sopra, se la cartella di destinazione non esiste già, sembra Copy-Itemche riprodurrà la struttura della cartella, ma un livello inferiore (ad esempio, C:\FolderA\B\Cviene copiato C:\FolderB\Cinvece di C:\FolderB\B\C) e potrebbe anche fallire quando esistono più sottocartelle. Assicurarsi sempre che la cartella di destinazione esista prima di chiamare Copy-Item. Questo puzza di bug (non vedo alcun motivo per cui questo comportamento incoerente sarebbe desiderabile).
Marc Durdin,

1
Vedi anche commento su SO .
Marc Durdin,

0

È possibile utilizzare -File -Recurse per copiare solo file in modo ricorsivo:

Copia-Item -Path "C: \ Source" -Destinazione "C: \ Dest" -File -recurse -Force -Verbose

Oppure usa -Directory -Recurse per copiare solo la struttura delle cartelle empy :

Copia-Item -Path "C: \ Source" -Destinazione "C: \ Dest" -Directory -recurse -Force -Verbose

Cordiali saluti,

Paul Pedroza


-1
Copy-Item -Path "C:\FolderA" -Destination "C:\FolderB" -recurse -Force -Verbose

Funzionerebbe anche.


1
Questo sembra essere un commento sulla risposta simile di FastEthernet. Se vuoi proporre una risposta alternativa, dovresti spiegare perché risponde alla domanda.
Blackwood,

Ciò crea C: \ FolderB se non esiste - ma crea C: \ FolderB \ FolderA se esiste C: \ FolderB. Se esegui quel comando due volte puoi ottenere due copie di tutto in posizioni leggermente diverse! Così tanto dolore.
Lamarth,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.