首页 > 解决方案 > Powershell:提取部分文件名以创建文件夹并将文件移动到文件夹中

问题描述

我是 powershell 的新手,我正在努力实现以下目标:

我有一个格式相同的文件列表:SURNAME_FIRSTNAME_CODE1_CODE2_NAME.pdf/docx 等

我想创建一个名为:SURNAME FIRSTNAME CODE1 的子文件夹

然后将所有这些相关文件移动到文件夹中。

我设法找到一篇文章来完成第一部分(即姓氏),但不确定如何使它与其他部分一起工作......任何帮助将不胜感激。

到目前为止,这是我所拥有的:(感谢一位同事的海报)

Get-ChildItem -File -Path $directory -Filter "*.*" | 
ForEach-Object {
New-Item -ItemType Directory "$directory$($_.Name.Split("_")[0])" -Force;   
Move-Item -Path $_.FullName -Destination  "$directory$($_.Name.Split("_")[0])\$($_.Name)"      
} 

标签: powershelldirectory

解决方案


我就是这样做的。它使用Group-Object对属于同一目录的文件进行分组,并使用格式运算符创建目录名称。如果您有任何问题,请告诉我。

Get-ChildItem $directory -File |
  group { "{0} {1} {2}" -f $_.BaseName.Split("_") } |
  foreach {
    $newDir = Join-Path $directory $_.Name
    New-Item $newDir -ItemType Directory
    $_.Group | Move-Item -Destination $newDir
}

推荐阅读