Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 查找30天以前的文件_Powershell - Fatal编程技术网

Powershell 查找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

我创建了一个脚本来查找有一定天数的文件。我用它来查找30天以前的文件,但如果需要插入不同的时间,我会尽量让它保持打开状态

在向脚本的这一部分提供您想要的信息之后,它应该创建一个包含所有符合条件的文件的文本文件。我可以找到
-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
来达到这个目的