Изменить "дату изменения" папок (возможно, powershell)
Время от времени, когда я принудительно выключаю компьютер с Windows Server 2003 (у меня нет выбора), все папки, содержащиеся в определенном каталоге, меняют свою "измененную дату" на текущую дату.
К счастью, внутри каждой из этих папок все файлы имеют правильную "дату изменения".
Один из этих файлов, с которым я хочу скопировать "измененную (или созданную) дату", - это файл.jdf, который находится внутри каждой из папок.
Мне нужна помощь для создания скрипта в PowerSell.
Я нашел этот скрипт PS1, который почти выполняет свою работу:
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..."
}
}
Проблема в том, что последний измененный объект внутри папок иногда является подпапками, которые также получают текущую дату как "дату изменения". Как сделать так, чтобы он смотрел файлы внутри папки, а не папки?
2 ответа
Попробуй это:
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..."
}
}
В то время как Get-ChildItem $root -directory
дает тот же результат, что и
Get-ChildItem $root | Where-Object {$_.PSIsContainer}
ты можешь попробовать (я не знаю PS
подробный синтаксис)
Get-ChildItem $root -file
или даже
gci $root -file
Не уверен, нуждается ли ваш сценарий в улучшении...