Проблема с подстановочными знаками в Move-Item - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь переместить все папки и их содержимое в папку, основываясь на первой части имени папки.Например, все папки, которые начинаются с 2018 года, находятся в папке с именем 2018. Папки со всей структурой именования год-месяц-день (xxxx-xx-xx), т. Е. 2018-01-01, 2018-01-02 и т. Д.Итак, я попытался использовать Move-Item с подстановочными знаками * и?после года.

Move-Item . -Include 2018* .\2018

и

Move-Item . -Include 2018?????? .\2018

Но я получаю эту ошибку:

Move-Item : Cannot move item because the item at 'F:\My Share\One\More\Folder' does not exist.
At line:1 char:1
+ Move-Item . -Include 2018* .\2018
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Move-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand

Я получаю ту же ошибку с любымодин.Я надеюсь, что я включил достаточно информации, чтобы вы могли просветить этого новичка.: -)

Заранее спасибо!

1 Ответ

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

S.TECHS,

, если dir не существует, Move-Item не сможет это сделать.ну, это не будет на win7ps5.1 - это возможно на win10, так как там есть несколько улучшений.

следующий код работает на win7ps5.1, проверяя каталог назначения и делая его, если он там не существует.[ ухмылка ]

$SourceDir = $env:TEMP
$Filter = '20??-*'

$FileList = Get-ChildItem -LiteralPath $SourceDir -Filter $Filter

foreach ($FL_Item in $FileList)
    {
    $Year = $FL_Item.BaseName.Split('-')[0]
    $DestDir = Join-Path -Path $SourceDir -ChildPath $Year
    $FullDestFileName = Join-Path -Path $DestDir -ChildPath $FL_Item.Name

    if (-not (Test-Path $DestDir))
        {
        # suppress unwanted output of New-Item
        $Null = New-Item -Path $DestDir -ItemType Directory
        }

    Move-Item -LiteralPath $FL_Item.FullName -Destination $FullDestFileName
    }

надеюсь, что это поможет,
ли

...