
有時,當我強制關閉 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
不確定您的腳本剩餘部分是否需要改進...