2017-07-26 6 views
1

Ziel ist das Kopieren von Ordnern und Dateien aus einem Pfad in einen anderen Pfad mithilfe von PowerShell. Ich möchte jedoch bestimmte Dateien und Ordner davon abhalten, kopiert zu werden. Ich war in der Lage, mehrere Dateien ausschließen, indem Sie in die Liste ausschließen HinzufügenAusschließen mehrerer Ordner beim Kopieren mit Powershell

Get-ChildItem -Path $source -Recurse -Exclude "web.config","body.css","Thumbs.db" 

Für Ordner mit Ausnahme Ich habe

$directory = @("Bin") 
?{$_.fullname -notmatch $directory} 

und die endgültige Kopie Skript sieht aus wie

Get-ChildItem -Path $source -Recurse -Exclude "Web.config","body.css","Thumbs.db" | ?{$_.fullname -notmatch $directory} | Copy-Item -Force -Destination {if ($_.GetType() -eq [System.IO.FileInfo]) {Join-Path $dest $_.FullName.Substring($source.length)} else {Join-Path $dest $_.Parent.FullName.Substring($source.length)}} 

Dies scheint darauf hinzu arbeite mit einem einzigen Ordner, aber wenn ich den ausgeschlossenen Verzeichnissen mehrere Ordner hinzufüge, scheint es nicht zu funktionieren. Was kann getan werden, um mehrere Ordner auszuschließen?

+0

.it den restlichen Inhalt in den Zielordner kopieren looks wie du willst '$ _. basename' statt ..' wo {$ _. basename -notin $ dir -und $ _. psiscontainer -eq $ true} ' – Kiran

Antwort

0

Da $directory ein Array ist, sollten Sie versuchen, den Inhalt und nicht sich selbst anzupassen (es ist ärgerlich, dass Powershell einzelne Elemente wie ihre Inhalte behandelt).

können Sie versuchen:

?{$directory -contains $_.fullname} 

Statt:

?{$_.fullname -notmatch $directory} 
+0

Ich nehme an? {$ directory -contains $ _. fullname} überprüft, ob die Ordnerliste die Ordner enthält, die im $ - Verzeichnis aufgelistet sind, und sie daher auszuschließen, die wir verwenden müssen? {$ verzeichnis -nr t enthält $ _. fullname}. Ich habe versucht, dies zu verwenden, aber das scheint nicht zu funktionieren. Es kopiert immer noch jeden Ordner unabhängig vom Inhalt von $ Verzeichnis –

+0

@stevesimon Yup, du hast Recht, mein Schlechter. Und schade, dass es nicht funktioniert! Haben Sie versucht, sich in der Powershell-Befehlszeile mit Namensformatierung usw. herumzuärgern, statt das gesamte Skript auf einmal auszuführen? Vielleicht könnten Sie, um uns allen zu helfen, ein Beispiel für den Inhalt Ihrer $ Verzeichnisdatei posten, falls Sie den Fehler gemacht haben. –

0

starten:

$excluded = @("Web.config", "body.css","Thumbs.db") 
Get-ChildItem -Path $source -Recurse -Exclude $excluded 

Aus dem Kommentar, falls Sie Ordner ausschließen möchten, können Sie verwenden etwas wie dieses:

Get-ChildItem -Path $source -Directory -Recurse | 
     ? { $_.FullName -inotmatch 'foldername' } 

oder Sie können den Behälter überprüfen Sie zuerst, dann tun:

Get-ChildItem -Path $source -Recurse | 
     ? { $_.PsIsContainer -and $_.FullName -notmatch 'foldername' } 
+0

Ich bin in der Lage, Dateien beim Kopieren auszuschließen. Das Problem tritt bei Ordnern auf und ich kann anscheinend keine Möglichkeit finden, mehrere Ordner vom Kopieren auszuschließen. –

1
$source = 'source path' 
$dest = 'destination path' 
[string[]]$Excludes = @('file1','file2','folder1','folder2') 
$files = Get-ChildItem -Path $source -Exclude $Excludes | %{ 
$allowed = $true 
foreach ($exclude in $Excludes) { 
    if ((Split-Path $_.FullName -Parent) -match $exclude) { 
     $allowed = $false 
     break 
    } 
} 
if ($allowed) { 
    $_.FullName 
} 
} 
copy-item $source $dest -force -recurse 

Der obige Code mehrere Ordner aufgelistet in $ Ausgeschlossen Array schließt und

+1

Sie haben einen Tippfehler. In der letzten Zeile sollten Sie '$ files' anstelle von' source' haben. – Alternatex

Verwandte Themen