用于删除未使用文件的Powershell脚本

时间:2016-05-03 19:37:42

标签: windows file powershell windows-7 filesystems

我尝试编写一个删除指定目录中所有文件的脚本,但是我不想删除当前正在使用的文件(正在查看,编辑等)。我发现的是,对于某些文件类型(.docx,.xlsx等),这很好用,并且.ps1脚本按预期失败并继续运行。但是,某些文件(.bmp,.txt)可以打开并删除。看起来某些文件在使用时未锁定。我想我的问题是一些较小的问题:

  1. 有没有办法判断文件是否在使用中(除了查看文件是否被锁定)?
  2. 在使用中是否有任何明确的方法来确定哪些文件类型被锁定?
  3. 是否有比Remove-Item更好的cmdlet用于我想要实现的目标?
  4. 提前致谢!

2 个答案:

答案 0 :(得分:0)

某些应用程序(例如Word)会锁定文件并阅读它们以避免在文件打开时进行修改(通常情况下,如果您想在ex。Word中修改它)。其他应用程序,如notepad,不会。

这不是特定于文件类型(它只是与内部数据无关的GUI属性)。它是决定是否要锁定文件的应用程序。例如:

  • 在Word中打开docx文件:拒绝访问(正在使用的文件)
  • 在Wordpad中打开docx文件:成功(无锁定)

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并且不要删除任何已检出的内容。然而,对于普通用户来说,这不是一个友好的解决方案。