2012-10-24 73 views
0

我的IF-ELSE語句有些問題,我的愚蠢的大腦無法弄清楚它到底是什麼!遞歸顯示沒有顯示正確的格式

如果我單獨運行下面的代碼它顯示在下面的格式,每個目錄和文件在那裏:

get-childitem E:\LogArchive -recurse | where-object {$_.lastwritetime -gt 60} 

輸出格式:

Directory: E:\LogArchive\W3SVC100 


Mode    LastWriteTime  Length Name 
----    -------------  ------ ---- 
-----  29/03/2007  15:03  663 ex070329.log.gz 
-----  30/03/2007  15:44  860 ex070330.log.gz 
-----  03/04/2007  13:41  354 ex070403.log.gz 
-----  05/04/2007  14:00  704 ex070405.log.gz 
-----  10/04/2007  17:56  921 ex070410.log.gz 
-----  11/04/2007  14:55  987 ex070411.log.gz 
-----  12/04/2007  15:12  539 ex070412.log.gz 

然而,這在運行時在代碼中顯示如下,沒有所有的文件夾結構和日期等:

W3SVC100 
W3SVC102 
W3SVC105 
W3SVC106 
W3SVC1108492480 
W3SVC112 
W3SVC116 
W3SVC118 
W3SVC1209046175 
W3SVC123110214 
W3SVC1262336480 
W3SVC127 
W3SVC134 
W3SVC134239081 
W3SVC137 
W3SVC139 
W3SVC145 
W3SVC147 
W3SVC1499983181 
W3SVC15 

我如何g et下面的腳本運行時的第一個結果 - 顯示所有修改日期,最後寫入時間等。如果在日期範圍內沒有找到文件,那麼我正在向用戶輸入消息,然後顯示一條消息 - 但是,如果確實找到任何文件,則顯示它們,如第一個輸出類型中所列出的那樣.......

實際上,我認爲故障是在這條線,但無法弄清楚如何修改這個:

if ($runchilditem.lastwritetime -gt DateToCompare) 

......其實 - 我希望把輸出到CSV - 我的任何想法怎麼能做這個?

CODE:

$path = Read-Host "Please enter the path of the folder yu wish to check - this will check sub-folders as well" 
Write-Host "`n" 
$days = Read-Host "Please enter in number of DAYS you wish to go back" 

$DateToCompare = (Get-Date).AddDays(-$days) 

$runningtrue = Get-ChildItem $path -Recurse | where-object {$_.lastwritetime -gt $DateToCompare} 

Write-Host "`n" 
$runchilditem = @(Get-ChildItem $path -Recurse) 
    if ($runchilditem.lastwritetime -gt DateToCompare) 
     { 
      Write-Host "No Files Matching Date Criteria Found" 
     } 
    else 
     { 
      $runningtrue 
     } 
+0

所以,你只是想顯示的文件比指定或顯示的日期更近如果沒有更近的消息,這些消 – EBGreen

+0

嗨 - 是的,所以如果一個文件超過90天,那麼顯示這些文件。 – lara400

回答

1

如果我理解你的需要,這裏是我會怎麼做:

$path = Read-Host 'Path' 
[int]$dayDiff = Read-Host 'Number of days to go back' 
$offset = $dayDiff * -1 
$files = Get-ChildItem $path -Recurse | Where-Object{$_.LastWriteTime -gt (Get-Date).AddDays($offset)} 
if(($files.Count -eq 0) -OR ($files -eq $null)){ 
    'There are no files after {0} in {1}' -f (Get-Date).AddDays($offset), $path 
}else{ 
    $files 
    $files | Export-CSV C:\PATH\TO\FILE.csv -NoTypeInfo 
} 
+0

幾乎在那裏我想 - 當我在命令中用*運行這個時出現錯誤。我只想顯示文件的結果(以及這些文件駐留在哪個文件夾中),這些文件的含義超過(或等於)90天。 – lara400

+1

是的,我正在做我的頭頂。看看編輯是否是你需要的。 – EBGreen

+0

輝煌 - 這正是我需要的! – lara400