0

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

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

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

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

这有效,但显示会有重复的文件名。

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

4

1 回答 1

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
}
于 2012-11-30T21:55:53.530 回答