Переместить файлы в Powershell - PullRequest
0 голосов
/ 03 мая 2019

Используя приведенный ниже код в качестве основы (из другого вопроса), как я могу переместить файлы между 2 датами, например:> 2 недели И <13 месяцев в другое место. Также возможно ли ограничить расширение файла для перемещения? </p>

get-childitem -Path "E:\source" |
    where-object {$_.LastWriteTime -lt (get-date).AddDays(-31)} | 
    move-item -destination "F:\target"

1 Ответ

2 голосов
/ 03 мая 2019

Ограничение выборки файлов с помощью 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.

Для этого взгляните на документы

...