我们如何使用 powershell 脚本引用文件名来分隔文件夹

How can we separate folders using powershell script with reference of filename

我是 powershell 脚本的新手,我确实在这里浏览了很多文章,但没能得到多少help.Can有人帮我解决如何将文件放在特定文件夹中的问题:

文件名示例:

2008_11_chan_3748_NB001052_031_SIGNED.pdf 

放入文件夹:

2008/11/NB001052-031/....

如果它以“草稿”结尾,例如

2008_11_chan_3748_NB001052_031_Draft.pdf 

将其放在单独的草稿文件夹中,如下所示

 2008/11/NB001052-031/Draft

非常感谢任何帮助。 提前致谢。

Push-Location c:09

Get-ChildItem -File -Filter *_*_*_*_*_*.pdf |
  Move-Item -Destination {
    $tokens = $_.Name -split '_'
    $subdirNames = $tokens[0,1,4]
    if ($tokens[-1] -like 'Draft.*') { $subdirNames += 'Draft' }
    (New-Item -Force -Type Directory ($subdirNames -join '\')).FullName
  } -WhatIf

Pop-Location

注意:上面命令中的 -WhatIf common parameter 预览了 移动 操作,但目标子文件夹 立即创建的在这种情况下。 一旦您确定该操作将执行您想要的操作,请删除 -WhatIf

(部分)说明:

  • Get-ChildItem 调用获取当前目录中名称与通配符模式 *_*_*_*_*_*.pdf.

    匹配的那些文件
  • Move-Item -Destination 使用 ({ ... }) to dynamically determine the target path based on the current input object, $_, which is of type System.IO.FileInfo

  • 脚本块中的代码使用-split operator通过_将文件名拆分为标记,提取感兴趣的标记并附加Draft作为合适的,然后根据\-joined tokens创建/returns一个子目录路径,以便输出目标目录路径;请注意 -Force 按需创建目录并悄悄地 returns 现有目录。