PS - 如何从文本文件

时间:2017-04-21 21:25:28

标签: powershell

我得到一个没有完整路径的提取文件列表。它们以单独的行显示在txt文件中。这些文件可以在不同的文件夹或子文件夹中找到。我希望从列表中删除这些文件,并且只有在文件名超过30分钟时才会从列表中删除文件名。

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
        }
    }

我是初学者如何从原始列表中删除文件名C:\ list.txt?

谢谢。

1 个答案:

答案 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)
        }
    }