2017-04-21 120 views
0

我得到的文件沒有完整路徑的解壓縮列表。他們在一個單獨的文本文件中出現。這些文件可以在不同的文件夾或子文件夾中找到。我想從列表中刪除這些文件,並且僅當文件名超過30分鐘時才從列表中刪除文件名。PS - 如何從文本文件中刪除文件名條目

LIST.TXT例如:

file1.doc 
file2.doc 
file3.doc 

比方說file3.doc不到30分鐘之前。用我目前的代碼,我可以儘可能刪除file1.doc和file2.doc,而不是觸摸file3.doc沒有問題。我希望我的代碼在刪除文件時從list.txt中刪除file1.doc和file2.doc。

$Now = Get-Date 
$Minutes = "30" 
$TargetFolder = "C:\Test" 
$LastWrite = $Now.AddMinutes(-$Minutes) 

$Files = Get-Content C:\list.txt |% {get-childitem $TargetFolder -include $_ -recurse} | Where {$_.LastWriteTime -le "$LastWrite"} 

foreach ($File in $Files) 
    { 
    if ($File -ne $NULL) 
     { 
     Remove-Item $File.FullName -WhatIf | out-null 
     } 
    } 

我是一個總初學者我怎麼會去從原來的列表中刪除ç文件名:\ LIST.TXT?

謝謝。

+5

歡迎來到StackOverflow。這裏有[問]的指南。一般來說,問題應該包括你已經嘗試過的以及你被卡住的地方的代碼。如果您正在使用PowerShell,則可以使用Get-ChildItem,Get-Content,Remove-Item,Get-Date Cmdlet。您可以通過'Get-Help xxx -Examples'獲取如何使用這些信息的詳細信息,其中'xxx'是您需要幫助的命令。 – BenH

+0

另外'Get-Content'; – t0mm13b

+0

不能很好理解問題陳述。你能否給出一個示例輸入,預期輸出以及目前爲止設法獲得的結果? –

回答

0

我以如下方式使用Set-Content獲取了它。如果你認爲我做錯了什麼,請隨時發表評論,但這對我很有幫助。

$Now = Get-Date 
$Minutes = "30" 
$TargetFolder = $args[0] 
$LastWrite = $Now.AddMinutes(-$Minutes) 
$List = "C:\list.txt" 

$Files = Get-Content $List |% {get-childitem $TargetFolder -include $_ -recurse} | Where {$_.CreationTime -le "$LastWrite"} 

foreach ($File in $Files) 
    { 
    if ($File -ne $NULL) 
     { 
     Add-Content -path C:\deleted.txt -value ((get-date).ToShortDateString() + ' - ' + (get-date).ToShortTimeString() + ' ' + $File.FullName) 
     Remove-Item $File.FullName | out-null 
     Set-Content -Path $List -Value (get-content -Path $List | Select-String -Pattern $File.Name -NotMatch) 
     } 
    }