Powershell获取超过x天的文件并移动它们

时间:2013-11-27 15:29:51

标签: pdf powershell csv

我相信这可能会被问过一百万次。我是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

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

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

4 个答案:

答案 0 :(得分:2)

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

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

使用filter参数的顺便也更快,这在搜索网络共享时可能很重要。

答案 1 :(得分:1)

另一种方法是指定-Name标志并对filename:

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

答案 2 :(得分:0)

一种方法是将$_.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

答案 3 :(得分:0)

我不确定您的上一个问题,但如果您的PDF文件没有扩展名,请参阅this discussion

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

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