【问题标题】:Powershell script to remove files that are not in use用于删除未使用文件的 Powershell 脚本
【发布时间】:2016-05-03 19:37:42
【问题描述】:

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

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

提前致谢!

【问题讨论】:

    标签: windows file powershell windows-7 filesystems


    【解决方案1】:

    Word 这样的一些应用程序会在读取文件时锁定文件,以避免在文件打开时对其进行修改(通常是在您想在例如Word 中修改它的情况下)。其他应用程序,例如 notepad,则不会。

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

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

    AFAIK 无法检测到 100% 的文件正在被 ex 使用。不锁定文件的记事本。

    删除文件的方法有很多种,但Remove-Item 不亚于其中任何一种。

    【讨论】:

      【解决方案2】:

      补充 Frode 的观点,remove-item 没有错。普通目录不会为您提供太多。通过 Windows 文件服务器托管的文件提供 session information 可能会帮助您确定文件是否正在使用。如果可能,您可以实现排除正在使用的文件的智能逻辑。

      一般来说,我建议您的 powershell 脚本检查文件的 LastAccessTime,例如,删除 24 小时内未访问的所有内容

      Get-ChildItem -path c:\ps | Where-Object {$_.LastAccessTime -lt (get-date).addDays(-1)}
      

      保护文件的极端方法是使用 SCM 并且不要删除任何签出的内容。然而,这对普通用户来说并不是一个友好的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-01
        • 2019-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多