Как использовать .LastWriteTime и (Get-Date) .Month для перемещения данных в новую структуру папок год / месяц - PullRequest
0 голосов
/ 10 октября 2018

Я довольно новичок в powershell, и мне было поручено очистить архивный сервер.Я пытаюсь создать сценарий для перемещения файлов в структуру папок Year \ Month, посмотрев на LastWriteTime в Powershell.

У меня есть нижеприведенное, но я не знаю, как заставить его смотреть на месяцфайл был отредактирован?

$Path = "D:\Data"
$NewPath = "D:\ArchiveData"
$Year = (Get-Date).Year
$Month = (Get-Date).Month

New-Item $NewPath\ -name $CurrentYear -ItemType Directory
New-Item $NewPath\$Year -Name $Month -ItemType Directory
Get-ChildItem -path $Path | Where-Object {$_.LastWriteTime -Contains (Get-Date).month} | Move-Item -Destination "$NewPath\$Year\$Month"

Любые идеи о том, как я могу это сделать, будут оценены?

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Я думаю, что подхожу к этому с другого конца.При необходимости можно создавать каталоги.

Если вы уверены, что файлы будут перемещены правильно, удалите -WhatIf из командлета Move-Item.

$Path = 'C:\src\t'
$NewPath = 'C:\src\tarch'

Get-ChildItem -File -Path $Path |
    ForEach-Object {
        $Year = $_.LastWriteTime.Year
        $Month = $_.LastWriteTime.Month
        $ArchDir = "$NewPath\$Year\$Month"

        if (-not (Test-Path -Path $ArchDir)) { New-Item -ItemType "directory" -Path $ArchDir | Out-Null }
        Move-Item -Path $_.FullName -Destination $ArchDir -WhatIf
    }
0 голосов
/ 10 октября 2018

-contains используется, чтобы увидеть, содержит ли массив элемент;это не подходит здесь.

-eq - это то, что вам нужно.В соответствии с вашей переменной $Month вам нужно будет получить только ту часть, которая вам нужна (т.е. месяц):

($_.LastWriteTime).Month -eq (Get-Date).month
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...