gpt4 book ai didi

powershell - rm -f 等效于忽略不存在文件的 PowerShell

转载 作者:行者123 更新时间:2023-12-04 12:20:41 28 4
gpt4 key购买 nike

背景
我有一个 PowerShell 脚本,可以将一些结果写入文件。

  • 我想在脚本开始时自动删除结果文件 Remove-Item .
  • 您可以手动删除结果文件,因此即使结果文件不存在,我也不想显示错误消息。
  • 当脚本由于其他原因无法删除结果文件时,我想显示错误消息,例如文件被锁定。

  • 您可以使用 rm -f 满足上述所有要求。在类 Unix 系统中。
    问题
    首先我尝试过 Remove-Item -Force ,但它不能忽略不存在的文件(参见 rm -f 忽略不存在的文件)。
    PS C:\tmp> Remove-Item C:\tmp\foo.txt -Force
    Remove-Item : Cannot find path 'C:\tmp\foo.txt' because it does not exist.
    At line:1 char:1
    + Remove-Item C:\tmp\foo.txt -Force
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (C:\tmp\foo.txt:String) [Remove-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
    接下来,我试过 Remove-Item -ErrorAction IgnoreRemove-Item -ErrorAction SilentlyContinue ,但是当它们删除文件失败时,它们不会显示错误消息(参见 rm -f 在这种情况下会显示类似 rm: cannot remove 'foo.txt': Operation not permitted 的错误消息)。
    PS C:\tmp> $file = [System.IO.File]::Open('C:\tmp\foo.txt',[System.IO.FileMode]::Open,[System.IO.FileAccess]::Read,[System.IO.FileShare]::None)
    PS C:\tmp> Remove-Item C:\tmp\foo.txt -ErrorAction Ignore
    # I expected it shows an error because it couldn't remove the file because of the lock, but it showed nothing
    PS C:\tmp> $file = [System.IO.File]::Open('C:\tmp\foo.txt',[System.IO.FileMode]::Open,[System.IO.FileAccess]::Read,[System.IO.FileShare]::None)
    PS C:\tmp> Remove-Item C:\tmp\foo.txt -ErrorAction SilentlyContinue
    # I expected it shows an error because it couldn't remove the file because of the lock, but it showed nothing

    有没有 rm -f在满足上述所有要求的 PowerShell 中等效吗?

    最佳答案

    对我来说,最简单的解决方案是:

    if (test-path $file) {
    remove-item $file
    }
    这也发生在我身上。 $error[0] 总是最新的错误。
    remove-item $file -erroraction silentlycontinue
    if ($error[0] -notmatch 'does not exist') {
    write-error $error[0] # to standard error
    }
    我认为您也可以在特定异常(exception)情况下使用 try/catch。这是一个例子。我通过选项卡完成发现了异常。但是脚本将因其他未捕获的异常而停止。此错误通常不会停止。
    try { remove-item foo -erroraction stop }
    catch [System.Management.Automation.ItemNotFoundException] { $null }
    'hi'

    关于powershell - rm -f 等效于忽略不存在文件的 PowerShell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63157509/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com