【问题标题】:Wildcard issue with Move-ItemMove-Item 的通配符问题
【发布时间】:2018-10-05 04:40:26
【问题描述】:

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

我得到与任何一个相同的错误。我希望我提供了足够的信息,让您能够启发这个新手。 :-)

提前致谢!

【问题讨论】:

  • 如果该文件夹不存在则需要创建它

标签: powershell wildcard


【解决方案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
    }

希望对你有帮助,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    相关资源
    最近更新 更多