폴더의 "수정 날짜" 변경(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..."
}
}

문제는 폴더 내의 마지막 수정된 개체가 때때로 현재 날짜를 '수정된 날짜'로 가져오는 하위 폴더라는 것입니다. 폴더가 아닌 폴더 안의 파일이 보이도록 하려면 어떻게 해야 합니까?

답변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

스크립트 나머지 부분에 개선이 필요한지 확실하지 않습니다...

관련 정보