Ich habe eine Verzeichnisquelle mit einigen Dateien darin, die ich in einen Ordner Ziel kopieren möchte. Das Ziel ist möglicherweise vorhanden und enthält möglicherweise bereits Dateien. Alle Dateien mit demselben Namen wie die in Source sollten überschrieben werden.
Wenn ich das in Powershell laufen lasse:
Copy-Item Source Destination -Force -Recurse
Copy-Item Source Destination -Force -Recurse
Copy-Item Source Destination -Force -Recurse
Dann erstellt die erste Zeile den Ordner .\Destination
und kopiert .\Source
ihn, was ich beim nächsten Mal wiederholen möchte. Die zweite Zeile wird jedoch stattdessen .\Source
in den neuen .\Destination
Ordner kopiert (erstellt .\Destination\Source
), und die dritte Zeile wird .\Destination\Source
erneut überschrieben .
Wie kann ich dafür sorgen, dass es sich die ganze Zeit wie im ersten Fall verhält? Das heißt, überschreiben .\Destination
statt kopieren?
quelle
if exists
Problem leicht lösen und erfordert nicht, dass Sie Ihr Ziel zwangsweise rekursiv löschen, was mit seinen eigenen Gefahren verbunden ist.Antworten:
Das Problem ist also das
funktioniert nur wenn
bar
nicht existiert undfunktioniert nur wenn
bar
vorhanden. Um dies zu umgehen, müssen Sie sicherstellen, dassbar
es etwas gibt, bevor Sie etwas unternehmenquelle
Wenn Sie nur Inhalte des "Quell" -Ordners kopieren möchten, verwenden Sie
quelle
destination
bereits vorhanden.Die Antwort von Steven Penny https://superuser.com/a/742719/126444 löscht nicht den ursprünglichen Inhalt des Zielverzeichnisses, sondern hängt ihn nur an. Ich musste den Zielordner vollständig durch den Inhalt der Quelle ersetzen und 2 Funktionen erstellen:
quelle
Angenommen, Sie haben die folgende Verzeichnisstruktur
Wurzel
Im Stammordner können Sie die gewünschten Ergebnisse mit der folgenden Befehlsfolge erzielen:
$files = gci ./folder_b -name
cp ./folder_a/*.txt -Exclude $files ./folder_b
Es wird nur c.txt kopiert
quelle