繁体   English   中英

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

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

我是 powershell 脚本的新手,我通过这里的很多文章做了 go 并且无法获得太多帮助。有人可以帮助我了解如何将文件放入特定文件夹:

文件名示例:

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:\2009

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常用参数预览移动操作,但在这种情况下立即创建目标子文件夹。 一旦您确定该操作将执行您想要的操作,请删除-WhatIf

(部分)解释:

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

  • Move-Item -Destination使用延迟绑定脚本块( {... } ) 根据当前输入 object, $_动态确定目标路径,其类型为System.IO.FileInfo

  • 脚本块内的代码使用-split运算符将文件名通过_拆分为标记,提取感兴趣的标记并酌情附加Draft ,然后根据加入的\ -joined 标记创建/返回子目录路径,以便output 目标目录路径; 请注意, -Force按需创建目录并悄悄地返回现有目录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM