Move-Item的通配符问题

时间:2018-10-05 04:40:26

标签: powershell wildcard

我正在尝试根据文件夹名称的第一部分将所有文件夹及其内容移动到文件夹中。例如,以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 :(得分:1)

S.TECHS

如果该目录不存在,则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
    }

希望有帮助,