File PowerShell逐个查找文件
我有一个脚本,它检查文件夹并找到最旧的文件(按LastWriteTime),并将找到的文件的LastWriteTime写入日志文件 如果我再次运行此脚本,我希望它能找到下一个最旧的文件,它的LastWriteTime大于以前写入日志文件的文件 但有一个问题。我的scipt每次只能在文件夹中找到最旧的文件,而忽略日志文件中的文件 我的剧本:File PowerShell逐个查找文件,file,powershell,time,File,Powershell,Time,我有一个脚本,它检查文件夹并找到最旧的文件(按LastWriteTime),并将找到的文件的LastWriteTime写入日志文件 如果我再次运行此脚本,我希望它能找到下一个最旧的文件,它的LastWriteTime大于以前写入日志文件的文件 但有一个问题。我的scipt每次只能在文件夹中找到最旧的文件,而忽略日志文件中的文件 我的剧本: $programdir = "C:\Data\PowerShell\Learning" $folder = "C:\Data\PowerShell\Learn
$programdir = "C:\Data\PowerShell\Learning"
$folder = "C:\Data\PowerShell\Learning\folder" #there is the files
$TimeLog = "$programdir\LastFileDate.log" #this file contains the last found file's LastWriteTime attribute
$LastWriteTime = Get-Content $TimeLog
$File = Get-ChildItem -Path $folder | Sort-Object LastWriteTime -Descending | Select-Object -Last 1 | Where-Object {$_.LastWriteTime -gt $LastWriteTime}
Clear-Content $TimeLog
$File.LastWriteTime | Set-Content $TimeLog
用这一行立即削弱选择集。特别是在您有
选择对象-Last 1
的位置:
在最后一条管道语句中,将选择集限制为1个文件。然后你应用你的约会逻辑。你需要先过滤你的日期,然后抓取合适的条目
Get-ChildItem -Path $folder -File |
Sort-Object LastWriteTime -Descending |
Where-Object {$_.LastWriteTime -lt $LastWriteTime} |
Select-Object -First 1
还有其他类似的方法也能奏效
还有 这是多余的,因为默认情况下,
设置内容
将覆盖。您可以删除清除内容
虽然这不是代码中的问题,但请注意,Get Content
返回的$LastWriteTime
是一个字符串,而不是datetime
对象。因为它位于where子句中语句的右侧,所以为了评估该子句,将其转换为[datetime]
另外,如果
$timelog
中有多行代码,请注意代码的行为可能会有所不同。获取所有文件时间并进行比较您自己必须从最早的开始!因此Where对象{$\ LastWriteTime-lt$LastWriteTime}对它来说是不正确的。必须使用-gt$LastWriteTime。最后,它将成为Do-While循环的一部分!你还有别的想法吗?@NorbertKiss你真的是先尝试的吗?实际上,这很有效。我们需要在那个日期之前先抓住所有的第一个,然后抓住最新的一个。
Get-ChildItem -Path $folder -File |
Sort-Object LastWriteTime -Descending |
Where-Object {$_.LastWriteTime -lt $LastWriteTime} |
Select-Object -First 1
Clear-Content $TimeLog
$File.LastWriteTime | Set-Content $TimeLog