【问题标题】:Powershell get files older than x days and move themPowershell 获取超过 x 天的文件并移动它们
【发布时间】:2013-12-13 07:59:03
【问题描述】:

我相信这可能已经被问过一百万次了。我对 Power Shell 很陌生,想问一下我这样做是否正确。

在目录中,我们有许多文件类型。我想要完成的是只移动超过一个月的 PDF 文件。甚至不触摸其他文件扩展名。文件夹中的扩展名是:

pdf、xml、csv

在提问之前我已经搜索了论坛。这是我目前所拥有的。

get-childitem -path \\server\folder -include "*.pdf" -exclude "*.xml,*.csv" | where-object {$_.LastWriteTime -gt (get-date).AddDays(-31)} | move-item -destination \\server\folder\folder2

不过有一个问题,如果没有文件扩展名,您将如何处理排除?

感谢您对这个菜鸟的时间和耐心!

【问题讨论】:

    标签: pdf powershell csv


    【解决方案1】:

    没有必要使用“where”来测试扩展,因为 get-childitem 会为您执行此操作。虽然我会在单个扩展名的情况下使用过滤器参数(第二个位置参数)来搜索例如:

    $date = (get-date).AddDays(-31)
    get-childitem \\server\folder *.pdf | where-object {$_.LastWriteTime -gt $date} | 
        move-item -destination \\server\folder\folder2
    

    顺便说一句,使用过滤器参数也更快,这在搜索网络共享时可能很重要。

    【讨论】:

    • 我在网上看到了关于 -filter 开关的内容。 Power Shell 比 DOS 好很多!我正在将我们所有的 DOS 脚本重写到 Power Shell 中。 Power Shell 对我来说似乎要容易得多。感谢您的帮助。
    • 这个脚本似乎采用了在最后 31 段内修改的每个文件,而不是之前。
    【解决方案2】:

    一种方法是将$_.Extension -eq ".pdf" 添加到您的where-object 块中,以便您只获取这些扩展。

    get-childitem -path \\server\folder  | where-object {
    $_.extension -eq ".pdf" -and ($_.LastWriteTime -gt (get-date).AddDays(-31))} | move-item -destination C:\test\test
    

    另外,如果你想要超过一个月的文件,你的日期比较需要是 -lt 而不是 -gt

    get-childitem -path \\server\folder  | where-object {
    $_.extension -eq ".pdf" -and ($_.LastWriteTime -lt (get-date).AddDays(-31))} | move-item -destination C:\test\test
    

    【讨论】:

    • 我知道 -gt 大于? -lt 是什么意思?感谢扩展 var。不知道。感谢您的帮助。
    • 没问题。 -lt 是“小于”。时间戳越旧,它就越少。因此,您需要小于 31 天前的日期的文件。在这里使用 -gt 只会抓取最近 31 天内写入的文件。
    【解决方案3】:

    另一种方法是指定 -Name 标志并使用通配符作为文件名:

    get-childitem -path \\server\folder -name "*.pdf" | where-object {$_.LastWriteTime -gt (get-date).AddDays(-31)} | move-item -destination \\server\folder\folder2
    

    【讨论】:

      【解决方案4】:

      我不确定你的最后一个问题是否理解,但如果你有没有扩展名的 pdf 文件,请参阅this discussion

      我认为这样的事情可以帮助你。 file.exe (download) 显示文件的 mime 类型,类似于 PDF document, version 1.6,具体取决于 pdf 文件版本。

       gci . | ? { (file.exe -b $_) -match "pdf" }
      

      【讨论】:

        猜你喜欢
        • 2016-02-12
        • 1970-01-01
        • 2017-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多