使用Powershell重命名文件并创建子文件夹

时间:2012-11-30 21:30:25

标签: powershell file-rename

我在具有这种命名约定的目录中有10K文档:

  

1050_14447_Letter Extension.pdf,1333_14444_Letter.docx等......

我尝试使用此脚本删除第二个下划线(包括第二个下划线)之前的所有字符:

Get-ChildItem -Filter *.pdf | Rename-Item -NewName {$_.Name -replace '^[0-9_]+'}

这很有效,但透露会有重复的文件名。

想知道脚本是否有某种方式可以根据文件名(减去扩展名)创建子文件夹?所以我的主文件夹中会有10K子文件夹。每个子文件夹只有一个文件。

1 个答案:

答案 0 :(得分:1)

这应该有效。它为每个项目创建一个新文件夹,然后移动它,在此过程中重命名它。

gci | ? {!$_.PSIsContainer} | % {New-Item ".\$($_.BaseName)" -Type Directory; Move-Item $_ ".\$($_.BaseName)\$($_.Name -replace '^[0-9_]+')"}

请注意,如果有两个文件具有相同名称但扩展名不同,则在尝试创建目录时会看到错误,但这两个文件将在同一文件夹中结束。

或者,如果您希望在脚本中保存更具可读性的内容,则功能相同:

$files = Get-ChildItem | Where-Object {!$_.PSIsContainer}
foreach ($file in $files)
{
    $pathName = ".\" + $file.BaseName
    New-Item $pathName -Type Directory
    $newFileName = $pathName + "\" + ($file.Name -replace '^[0-9_]+')
    Move-Item $file $newFileName
}