2017-08-22 48 views
0

我創建了一個腳本來查找一定天數的文件。我正在使用它來查找30天以前的文件,但是如果我需要插入不同的時間,我試圖將其保持打開狀態。查找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 
+1

使用'-eq'運算符將精確的日期和時間匹配到第二個..它永遠不會返回任何結果。 – cet51

回答

5

使用當量的問題是,datetime對象下降到第二,因此是2017年8月22日在上午11點59分27秒到-eq在2017年8月22日00:00: 00 AM?不,不是的。你能做些什麼來打敗那個,就是用.ToShortDateString()這個方法輸出一個字符串,比如8/22/2017。

$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 
+4

我總是使用'().Date'這樣的東西。保持一個datetimeobject但零時間。 – Matt

+0

我甚至都不知道,我現在會更新我的答案。謝謝馬特! – TheMadTechnician

+0

我認爲它必須處理與文件有關的實際時間。我不知道如何解決這個問題,因爲我對PowerShell非常陌生。我會盡量在短短几分鐘內將這些答案納入其中。非常感謝! – Ochuse