PowerShell berührt alle Dateien, die neuer als sind

2

Ich habe folgende Frage zu ServerFault gefunden:

Windows-Befehl für rekursive Berührung

Was meine Frage teilweise mit dieser Antwort beantwortet:

Windows-Befehl für rekursive Berührung

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

Ich habe PowerShell 2 zur Verfügung.

AKTUALISIEREN:

Ich habe festgestellt, dass dieses Scriptlet alle Dateien abruft, 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 soll:

(ls file).LastWriteTime = DateTime.now

Folgendes scheint logisch, kann aber nicht getestet werden, da durch das Sichern meiner Dateien das Änderungsdatum und die Änderungszeit meiner Dateien gestört werden:

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

Also, wird das funktionieren?

atwright147
quelle

Antworten:

3

PowerShell mit Unix Touch zu arbeiten, kommt mir albern vor.

Verwenden Sie stattdessen einfach native Powershell-Cmdlets.

Dieser Artikel behandelt es:

Im Wesentlichen:

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

Sollte den Trick machen.

Austin T French
quelle
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 deren Zeitstempel auf jetzt ändern. Ich habe Code für beide, bin mir aber nicht sicher, wie ich sie zusammensetzen soll. Vielen Dank für die bisherige Hilfe.
atwright147
Sorry, habe die Prüfung vergessen. Jetzt hinzugefügt. Dies macht im Wesentlichen das, wonach Sie fragen, verwendet aber eine If-Anweisung anstelle des where-Objekts
Austin T French
Brillant! Es klappt. Ich musste alle neuen Zeilen entfernen, um es von der Kommandozeile auszuführen, aber es funktionierte.
atwright147
Ja, ich hatte es in einem Skript-Formular. Um es von der Konsole aus auszuführen, musste es in ein einzeiliges Formular verschoben werden.
Austin T French