我尝试编写一个删除指定目录中所有文件的脚本,但是我不想删除当前正在使用的文件(正在查看,编辑等)。我发现的是,对于某些文件类型(.docx,.xlsx等),这很好用,并且.ps1脚本按预期失败并继续运行。但是,某些文件(.bmp,.txt)可以打开并删除。看起来某些文件在使用时未锁定。我想我的问题是一些较小的问题:
Remove-Item
更好的cmdlet用于我想要实现的目标?提前致谢!
答案 0 :(得分:0)
某些应用程序(例如Word
)会锁定文件并阅读它们以避免在文件打开时进行修改(通常情况下,如果您想在ex。Word
中修改它)。其他应用程序,如notepad
,不会。
这不是特定于文件类型(它只是与内部数据无关的GUI属性)。它是决定是否要锁定文件的应用程序。例如:
AFAIK无法检测到ex正在使用的100%文件。记事本没有锁定文件。
有很多方法可以删除文件,但Remove-Item
与其中任何一种一样好。
答案 1 :(得分:0)
添加到Frode的观点,remove-item
没有错。普通目录并不能为您提供很多帮助。通过Windows文件服务器提供的文件提供session information可能有助于您确定是否正在使用文件。如果可能,您可以实现排除正在使用的文件的智能逻辑。
一般情况下,我建议你解决一下你的powershell脚本检查文件的LastAccessTime,比如删除24小时内未被访问的所有内容
Get-ChildItem -path c:\ps | Where-Object {$_.LastAccessTime -lt (get-date).addDays(-1)}
保护文件的极端方法是使用SCM并且不要删除任何已检出的内容。然而,对于普通用户来说,这不是一个友好的解决方案。