使用下面的代码作为基础(来自另一个问题),如何在两个日期之间移动文件,例如:> 2周和<13个月到另一个位置。还可以限制文件扩展名的移动吗?
true
答案 0 :(得分:2)
可以用几种方法来限制要使用Get-ChildItem
来获取的文件。
第一种是使用-Filter
参数:
# set up the start and end dates
$date1 = (Get-Date).AddDays(-14)
$date2 = (Get-Date).AddMonths(-13)
# using -Filter if you want to restrict to one particular extension.
Get-ChildItem -Path "E:\source" -Filter '*.ext' |
Where-Object {$_.LastWriteTime -lt $date1 -and $_.LastWriteTime -gt $date2} |
Move-Item -Destination "F:\target"
如果需要限制多个扩展名,则无法使用-Filter
参数来实现。相反,您需要使用可以使用通配符模式数组的-Include
参数。
请注意,为了使-Include
工作,您还必须使用-Recurse
开关,或者将Get-ChildItem
的路径以\*
结尾,如下所示:
# using -Include if you want to restrict to more than one extensions.
Get-ChildItem -Path "E:\source\*" -Include '*.ext1', '*.ext2', '*.ext3' |
Where-Object {$_.LastWriteTime -lt $date1 -and $_.LastWriteTime -gt $date2} |
Move-Item -Destination "F:\target"
然后是一个-Exclude
参数,就像-Include
一样,它接受一个通配符参数字符串数组,该字符串数组将过滤掉您不需要的扩展名。
如果您需要过滤文件属性(如ReadOnly,Hidden等),则可以使用-Attributes
参数。
对于这些,请查看the docs