【问题标题】:PS - How can I remove a file name entry from a text filePS - 如何从文本文件中删除文件名条目
【发布时间】:2017-04-21 21:25:27
【问题描述】:

我得到一个没有完整路径的提取文件列表。它们以单独的行的 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 中删除文件名?

谢谢。

【问题讨论】:

  • 欢迎来到 StackOverflow。这是How to Ask 的指南。一般来说,问题应该包括关于您尝试过的内容以及遇到问题的代码。如果您希望使用 PowerShell,那么您将使用 Get-ChildItemGet-ContentRemove-ItemGet-Date Cmdlet。您可以通过Get-Help xxx -Examples 获取有关如何使用这些功能的详细信息,其中xxx 是您需要帮助的命令。
  • 还有Get-Content ;)
  • 不太明白问题陈述。您能否举例说明输入、预期输出以及到目前为止您设法获得的结果?

标签: powershell


【解决方案1】:

我通过以下方式使用 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)
        }
    }

【讨论】:

    猜你喜欢
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2021-11-13
    相关资源
    最近更新 更多