2017-01-09 1 views
1

Ich versuche, Verzeichnisstruktur + spezifische Dateien zu kopieren, aber gleichzeitig Dateien von den ausgewählten Typen auszuschließen, die das Wort "backup "In ihrem Namen. Diese AussageKopieren Verzeichnisstruktur + Dateien, aber um Dateien auszuschließen, die Sicherungswort in ihrem Dateinamen enthalten

Get-ChildItem "F:\rbf" -include *.txt, *.svc -Recurse | 
    ? {$_.fullname -notmatch '\\backup\\'} | 
    % {Copy-Item $_.fullname "D:\New\"} 

kopiert die gewünschten Dateien und schließt die nicht wollten diejenigen, aber ich brauche auch den gesamten Verzeichnisbaum zu halten.

+0

versuchen mit '-Exclude' mit Platzhalter' * Backup * ' – Nkosi

+0

Hallo, danke für die schnelle Antwort, aber ich habe kein Problem mit dem Ausschluss Teil, ich brauche, um herauszufinden, Wie beim Ausschließen und Kopieren der Dateien, um die gesamte Verzeichnisstruktur zu erhalten, wo die Dateien sind e gespeichert. Die Aufstellung kopiert nur meine Dateien, aber nicht das Verzeichnis. Struktur. –

Antwort

-2

Copy-Item hat auch ein- und ausschließen:

Copy-Item -path F:\rbf -Destination D:\New\ -exclude *backup* -recurse 

Diese kopieren Sie die Dateien sollten Sie mit Verzeichnisstruktur wollen und nicht die Backup-Dateien kopieren.

+0

Das wird die Verzeichnisstruktur intakt halten, aber '-Exclude' funktioniert nicht so, wie Sie es erwarten. –

+0

Hmm Ich habe es getestet und es schien zu funktionieren. –

+0

Ich habe PowerShell v2 und v4 getestet und kann Ihnen versichern, dass dies nicht der Fall ist. Wenn Sie '-Pfad F: \ rbf \ *' verwenden, werden Dateien und Ordner der obersten Ebene ausgeschlossen, die im Namen die Zeichenfolge "backup" enthalten. Dies gilt jedoch nicht für Dateien/Ordner, die in Unterverzeichnissen verschachtelt sind. –

0
$source = "F:\rbf" 
$destination = "D:\New" 

# Create the directory structure first 
Get-ChildItem -Path $source -Recurse -Force | 
      Where-Object { $_.psIsContainer } | 
      ForEach-Object { $_.FullName -replace [regex]::Escape($source), $destination } | 
      ForEach-Object { $null = New-Item -ItemType Container -Path $_ } 

# Then copy relevant files 
Get-ChildItem -Path $source -recurse -include *.txt, *.svc -exclude *backup* | 
      Where-Object { -not $_.psIsContainer } | 
      Copy-Item -Force -Destination { $_.FullName -replace [regex]::Escape($source), $destination } 
0

Verwenden robocopy anstatt zu versuchen, das Rad in Powershell neu zu erfinden.

Dadurch werden alle .txt und SVC-Dateien kopieren, wenn sie nicht die Zeichenfolge „Sicherung“ in ihrem Dateinamen haben:

robocopy F:\rbf D:\New *.txt *.svc /s /xf *backup* 

Dies wird kopieren Sie alle .txt und SVC-Dateien, wenn sie in einem Verzeichnis befinden namens „backup“:

robocopy F:\rbf D:\New *.txt *.svc /s /xd backup 
Verwandte Themen