Изменить «дату изменения» папок (возможно, в PowerShell)

Изменить «дату изменения» папок (возможно, в 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..."
}
}

Проблема в том, что последний измененный объект внутри папок иногда является подпапками, которые также получают текущую дату как 'modified date'. Как сделать так, чтобы он смотрел файлы внутри папки, а не папки?

решение1

Попробуй это:

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..."
    }
}

решение2

В то время как Get-ChildItem $root -directoryдает тот же результат, что и

Get-ChildItem $root | Where-Object {$_.PSIsContainer}

вы можете попробовать (я не знаю PSподробный синтаксис)

Get-ChildItem $root -file

или даже

gci $root -file

Не уверен, нуждается ли оставшаяся часть вашего сценария в улучшении...

Связанный контент