Powershell 查找30天以前的文件
我创建了一个脚本来查找有一定天数的文件。我用它来查找30天以前的文件,但如果需要插入不同的时间,我会尽量让它保持打开状态 在向脚本的这一部分提供您想要的信息之后,它应该创建一个包含所有符合条件的文件的文本文件。我可以找到Powershell 查找30天以前的文件,powershell,Powershell,我创建了一个脚本来查找有一定天数的文件。我用它来查找30天以前的文件,但如果需要插入不同的时间,我会尽量让它保持打开状态 在向脚本的这一部分提供您想要的信息之后,它应该创建一个包含所有符合条件的文件的文本文件。我可以找到-lt和-gt或-le或-ge的文件,但当我尝试使用-eq时,我没有得到任何结果。我下面列出的脚本部分有什么问题吗 $Path = Read-Host "What path should I look at?" $DaysOld = Read-Host "How many day
-lt
和-gt
或-le
或-ge
的文件,但当我尝试使用-eq
时,我没有得到任何结果。我下面列出的脚本部分有什么问题吗
$Path = Read-Host "What path should I look at?"
$DaysOld = Read-Host "How many days old should the files I'm looking for be?"
$Currentdate = Get-Date
$Targetdate = $Currentdate.AddDays(-$DaysOld).ToString('MM-dd-yyyy')
Write-Host "The target date is $targetdate"
$SourceFolder = $Path
$files = Get-ChildItem $Path -Recurse |
Where-Object { $_.LastWriteTime -eq $Targetdate } |
Where-Object { $_.PSIsContainer -eq $false } |
ForEach-Object { $_.FullName } |
Out-File $outfileCopy
使用-eq的问题是datetime对象的时间缩短到了第二个,2017年8月22日上午11:59:27也是如此-eq到2017年8月22日上午00:00:00?不,不,不是。要克服这一点,您可以使用
.toSortDateString()
方法输出字符串,如2017年8月22日
$Path = Read-Host "What path should I look at?"
$DaysOld = read-host "How many days old should the files I'm looking for be?"
$Currentdate = get-date
$Targetdate = $currentdate.AddDays(-$daysOLD).ToShortDateString()
Write-Host "The target date is $targetdate"
$SourceFolder = $path
$files = Get-ChildItem $path -Recurse| Where-Object {$_.lastwritetime.ToShortDateString() -eq $targetdate}|Where-Object {$_.PSIsContainer -eq $false} | ForEach-Object {$_.fullname}| out-file $outfileCopy
此方法仅在尝试匹配当天的内容时使用,而忽略一天中的时间,并且在查找小于或大于(包括-le和-ge)的内容时不应使用,因为它使用字符串求值而不是日期求值
编辑:多年来我一直在做错事,甚至都不知道。非常感谢@Matt指出[DateTime]
对象的.date属性,该属性保留了对象类型,但将其时间方面归零。更好的答案是:使用.Date属性进行比较,这也适用于大于和小于的评估
$Path = Read-Host "What path should I look at?"
$DaysOld = read-host "How many days old should the files I'm looking for be?"
$Currentdate = get-date
$Targetdate = $currentdate.AddDays(-$daysOLD).Date
Write-Host "The target date is $targetdate"
$SourceFolder = $path
$files = Get-ChildItem $path -Recurse| Where-Object {$_.lastwritetime.Date -eq $targetdate}|Where-Object {$_.PSIsContainer -eq $false} | ForEach-Object {$_.fullname}| out-file $outfileCopy
使用-eq的问题是datetime对象的时间缩短到了第二个,2017年8月22日上午11:59:27也是如此-eq到2017年8月22日上午00:00:00?不,不,不是。要克服这一点,您可以使用
.toSortDateString()
方法输出字符串,如2017年8月22日
$Path = Read-Host "What path should I look at?"
$DaysOld = read-host "How many days old should the files I'm looking for be?"
$Currentdate = get-date
$Targetdate = $currentdate.AddDays(-$daysOLD).ToShortDateString()
Write-Host "The target date is $targetdate"
$SourceFolder = $path
$files = Get-ChildItem $path -Recurse| Where-Object {$_.lastwritetime.ToShortDateString() -eq $targetdate}|Where-Object {$_.PSIsContainer -eq $false} | ForEach-Object {$_.fullname}| out-file $outfileCopy
此方法仅在尝试匹配当天的内容时使用,而忽略一天中的时间,并且在查找小于或大于(包括-le和-ge)的内容时不应使用,因为它使用字符串求值而不是日期求值
编辑:多年来我一直在做错事,甚至都不知道。非常感谢@Matt指出[DateTime]
对象的.date属性,该属性保留了对象类型,但将其时间方面归零。更好的答案是:使用.Date属性进行比较,这也适用于大于和小于的评估
$Path = Read-Host "What path should I look at?"
$DaysOld = read-host "How many days old should the files I'm looking for be?"
$Currentdate = get-date
$Targetdate = $currentdate.AddDays(-$daysOLD).Date
Write-Host "The target date is $targetdate"
$SourceFolder = $path
$files = Get-ChildItem $path -Recurse| Where-Object {$_.lastwritetime.Date -eq $targetdate}|Where-Object {$_.PSIsContainer -eq $false} | ForEach-Object {$_.fullname}| out-file $outfileCopy
使用
-eq
操作符将精确的日期和时间匹配到秒。。它永远不会返回任何结果。使用-eq
操作符将精确的日期和时间匹配到秒。。它永远不会返回任何结果。我总是使用().Date
来处理类似的内容。保留datetimeobject,但将时间归零。我甚至不知道,我将立即更新我的答案。谢谢你,马特!我认为这与一天中与文件相关的实际时间有关。我不知道该怎么解决这个问题,因为我是超级新手。我将在几分钟内尝试将这些答案合并到这里。非常感谢你<代码>()。日期比获取日期-h0-min0-s0-mil0短得多。谢谢@Matt@LotPings我总是用[datetime]::今天
为了这个目的,我总是用().Date
来处理这样的事情。保留datetimeobject,但将时间归零。我甚至不知道,我将立即更新我的答案。谢谢你,马特!我认为这与一天中与文件相关的实际时间有关。我不知道该怎么解决这个问题,因为我是超级新手。我将在几分钟内尝试将这些答案合并到这里。非常感谢你<代码>()。日期比获取日期-h0-min0-s0-mil0短得多。谢谢@Matt@LotPings我总是使用[datetime]::Today
来达到这个目的