更改資料夾的「修改日期」(可能在 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

不確定您的腳本剩餘部分是否需要改進...

相關內容