PowerShell berührt alle Dateien, die neuer sind als

3611
atwright147

Ich habe die folgende Frage zu ServerFault gefunden:

Windows rekursiver Berührungsbefehl

Welches beantwortet meine Frage teilweise mit dieser Antwort:

Windows rekursiver Berührungsbefehl

Ich möchte jedoch alle Dateien berühren (in Stamm- und Unterordnern (rekursiv)), die neuer als der 31. Januar 2013 (31.01.13) sind. Wie würde ich das machen?

Ich habe PowerShell 2 verfügbar.

AKTUALISIEREN:

Ich habe festgestellt, dass dieses Scriptlet alle Dateien erhält, nach denen ich suche:

Get-ChildItem C:\path\to\files -recurse | Where-Object { $_.LastWriteTime -ge [DateTime] "1/31/2013 9:00AM" } 

Ich bin mir jedoch nicht sicher, wie ich es mit dem Befehl "touch" kombinieren kann:

(ls file).LastWriteTime = DateTime.now 

Folgendes erscheint logisch, aber ich kann es nicht testen, da das Sichern meiner Dateien das Änderungsdatum / die Änderungszeit meiner Dateien beeinträchtigen wird:

(Get-ChildItem C:\path\to\files -recurse | Where-Object { $_.LastWriteTime -ge [DateTime] "1/31/2013 9:00AM" }).LastWriteTime = DateTime.now 

Wird dies funktionieren?

2

1 Antwort auf die Frage

3
Austin T French

Powershell to use Unix touch seems silly to me.

Instead, just use native Powershell cmdlets.

This article covers it:

Essentially:

Get-ChildItem -Path $youFolder -Recurse | Foreach-Object { if ($_.LastWriteTime -ge [DateTime] "1/31/2013 9:00AM") { $_.LastWriteTime = Get-Date } } 

Should do the trick.

Entschuldigung, aber ich denke, Sie haben den Punkt meiner Frage verpasst. Ich möchte nach Dateien filtern, die neuer als ein bestimmtes Datum sind, und dann ihren Zeitstempel auf jetzt ändern. Ich habe Code für beide, bin aber nicht sicher, wie ich sie zusammenstellen soll. Vielen Dank für die bisherige Hilfe. atwright147 vor 10 Jahren 0
Entschuldigung, ich habe die Überprüfung vergessen. Jetzt hinzugefügt Dies tut im Wesentlichen das, was Sie fragen, verwendet jedoch eine If-Anweisung anstelle des Where-Objekts Austin T French vor 10 Jahren 0
Brillant! Es klappt. Ich musste alle neuen Zeilen entfernen, um es von der Kommandozeile aus auszuführen, aber es funktionierte. atwright147 vor 10 Jahren 0
Ja, ich hatte es in einem Skript-Formular, damit es von der Konsole aus ausgeführt werden konnte, musste es in ein einzeiliges Formular verschoben werden. Austin T French vor 10 Jahren 0