13

Ich habe ein PowerShell-Skript entwickelt, und es funktioniert absolut gut. Die einzige Herausforderung besteht darin, dass die Dateien in den Unterordnern nicht an das Ziel verschoben werden.PowerShell-Skript zum Verschieben von Dateien und Ordnern einschließlich Unterordnern von einem Ort zu einem anderen älter als x Tage

get-childitem -Path "\\servername\location" | 
    where-object {$_.LastWriteTime -lt (get-date).AddDays(-31)} | 
    move-item -destination "C:\Dumps" 

Ich kann das Skript nicht weiter anpassen.

Antwort

10

Verwenden Sie die -Recurse Option auf dem Get-ChildItem Befehl durch in den Unterordnern, um die Dateien zu bekommen und dann jeweils einzeln zu bewegen, indem die Sammlung Move-Item

Get-ChildItem -Path "C:\Test" -Recurse | 
    Where-Object {$_.LastWriteTime -lt (Get-date).AddDays(-31)} | 
    Move-Item -destination "C:\Dumps" 

kochend Hier ein Screenshot:

screenshot

+0

Musaab. Das -Recursive scheint nicht zu funktionieren. Kannst du weiter helfen? – user1926332

+0

Sind Sie sicher, dass die Dateien die where-object-Klausel erfüllen? Ich werde meine Antwort mit einem Screenshot aktualisieren, um zu veranschaulichen, wie ich die Option -Recursive verwende. Überprüfen Sie es und lassen Sie mich wissen, was ich anders mache. –

+0

Hey vielen Dank Musaab .... Ich habe tatsächlich einen Charakter verlegt. – user1926332

12

Verschwenden Sie keine Zeit mit dem Versuch, robocopy in PowerShell neu zu erfinden.

robocopy \\servername\location C:\Dumps /e /mov /minage:31 
+0

Dieses Skript kopiert Dateien zum Ziel und nur aus dem Haupt Pfad. Ich möchte die Unterordner auch einschließen. Ich möchte sie an einen anderen Ort bringen. – user1926332

+1

Verwenden Sie '/ s', um in Unterordner zurückzukehren. Verwenden Sie '/ e' (anstelle von'/s'), um auch leere Unterordner einzubeziehen. Was meinst du mit "einem anderen Ort"? Möchten Sie die Ordnerstruktur nicht beibehalten? In diesem Fall könnten Sie bei PowerShell bleiben (mit der Option "-Recursive", wie @Musaab erwähnt). Dieser Ansatz birgt jedoch das Risiko eines Datenverlusts aufgrund von überschriebenen Dateien. –

+0

Danke Ansgar .... Ihr Robocopy-Skript hat den Job gemacht, den ich wollte, und mehr konnte ich ein weiteres Skript für eine andere Verwendung erstellen. – user1926332

6

Vereinfachung des oben
robocopy A:\ B:\ /MIR /minage:31
Wo A: \ Ihre Quelle ist B: \ ist Ihr Ziel

0

Ich brauchte einen schnellen einzeiler alle Daten von einem Laufwerk zu bewegen auf einen anderen. Das funktionierte perfekt für mich:

Get-ChildItem "E:" -Recurse | Move-Item -Destination "G:"