背景
我有一个PowerShell脚本,将一些结果写入文件。
- 我想要在脚本启动时使用
Remove-Item
自动删除结果文件。 - 您可以手动删除结果文件,因此即使结果文件不存在,我也不想显示错误消息。
- 如果脚本无法删除结果文件(例如文件被锁定),我希望显示错误消息。
在类Unix系统中,您可以使用rm -f
来满足上述所有要求。
问题
首先,我尝试了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 Ignore
和Remove-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
问题
PowerShell 中是否有与 rm -f
等效的命令,满足上述所有要求?