.png)
Von Zeit zu Zeit, wenn ich einen Computer mit Windows Server 2003 zwangsweise herunterfahre (ich habe keine andere Wahl), ändern alle in einem bestimmten Verzeichnis enthaltenen Ordner ihr Änderungsdatum auf das aktuelle Datum.
Glücklicherweise weisen alle Dateien in diesen Ordnern das richtige Änderungsdatum auf.
Eine dieser Dateien, deren „Änderungs- (bzw. Erstellungsdatum)“ ich kopieren möchte, ist eine JDF-Datei, die in jedem der Ordner enthalten ist.
Ich brauche Hilfe beim Erstellen eines Skripts in PowerSell.
Ich habe dieses PS1-Skript gefunden, mit dem es fast klappt:
Get-ChildItem $root | Where-Object {$_.PSIsContainer} | Foreach-Object{
# get the oldest file for the current directory object
$oldest = Get-ChildItem $_.FullName | Sort-Object LastWriteTime | Select-Object LastWriteTime -Last 1
if($oldest)
{
# oldest object found, set current directory LastWriteTime
$_ | Set-ItemProperty -Name CreationTime -Value $oldest.LastWriteTime
$_ | Set-ItemProperty -Name LastWriteTime -Value $oldest.LastWriteTime
}
else
{
# current directory is empty, directory LastWriteTime is left unchanged
Write-Warning "Directory '$($_.FullName)' is empty, skiping..."
}
}
Das Problem besteht darin, dass die zuletzt geänderten Objekte in den Ordnern manchmal Unterordner sind, die ebenfalls das aktuelle Datum als „Änderungsdatum“ erhalten. Wie kann ich dafür sorgen, dass die Dateien im Ordner angezeigt werden und nicht die Ordner?
Antwort1
Versuche dies:
Get-ChildItem $root |
Where-Object { $_.PSIsContainer } |
Foreach-Object{
$oldest = Get-ChildItem $_.FullName |
Where-Object { ! $_.PSIsContainer } |
Sort-Object LastWriteTime |
Select-Object -Last 1
if($oldest)
{
$_ | Set-ItemProperty -Name CreationTime -Value $oldest.LastWriteTime
$_ | Set-ItemProperty -Name LastWriteTime -Value $oldest.LastWriteTime
}
else
{
# current directory is empty, directory LastWriteTime is left unchanged
Write-Warning "Directory '$($_.FullName)' is empty, skiping..."
}
}
Antwort2
Während Get-ChildItem $root -directory
das gleiche Ergebnis wie
Get-ChildItem $root | Where-Object {$_.PSIsContainer}
Sie könnten es versuchen (ich kenne PS
die ausführliche Syntax nicht)
Get-ChildItem $root -file
oder auch
gci $root -file
Ich bin nicht sicher, ob der Rest Ihres Skripts verbessert werden muss …