有时,当我强制关闭 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
不确定你的脚本剩余部分是否需要改进......