首页 > 解决方案 > 如何批量重命名多个文件夹中的多个文件并将它们合并到一个大文件夹中?

问题描述

我已经按顺序列出了 100 多个文件夹的列表。

文件夹 1 文件夹 2 文件夹 3 等等...

在每个文件夹中都包含按顺序排列的图像

001.jpg 002.jpg 003.jpg 等等...

最终,我试图将这 100 多个文件夹合并到一个大文件夹中,其中所有图像都按照它们的顺序排列,将每个图像重命名为 000000001 - 99999999。

我是编码的完整初学者。我曾尝试使用批量重命名实用程序,但我无法将多个文件夹中的所有图像合并到一个文件夹中。

任何帮助表示赞赏。

谢谢!

标签: powershellfilerenamebulk-rename-utility

解决方案


这是满足您的要求所需的最少脚本。没有错误检查。

$topSourceFolderName根据您的计算机的$targetFolderName需要进行设置

我假设您的 100 多个文件夹、文件夹 1 文件夹 2 文件夹 3 等都存在于一个父文件夹下 ( $topSourceFolderName)

我假设单个父文件夹和单个父文件夹下的所有 100 多个文件夹仅包含 jpg 文件

我假设您的“一个大文件夹”($targetFolderName)不在单个父文件夹($topSourceFolderName)下的任何地方

我假设 PowerShell 脚本存储在一个文件夹中,而$topSourceFolderName不是$targetFolderName

如果您有任何问题,请发送电子邮件至 william.s.charlton@outlook.com

在我的示例中,PowerShell 脚本存储在 c:\temp\bulkConsolidate.ps1

C:\Temp\massiveFolder 是目标文件夹。它最初是空的。

C:\Temp\topFolder\Folder 1 有 001.jpg 和 002.jpg

C:\Temp\topFolder\Folder 2 有 001.jpg 和 002.jpg

脚本运行后,C:\Temp\massiveFolder 有 00000001.jpg、00000002.jpg、00000003.jpg 和 00000004.jpg

00000001.jpg 复制自 C:\Temp\topFolder\Folder 1\001.jpg

00000002.jpg 复制自 C:\Temp\topFolder\Folder 1\002.jpg

00000003.jpg 复制自 C:\Temp\topFolder\Folder 2\001.jpg

00000004.jpg 复制自 C:\Temp\topFolder\Folder 2\002.jpg

cls

$topSourceFolderName = "C:\Temp\topFolder"
$targetFolderName = "C:\Temp\massiveFolder"

#define empty PowerShell array 
$fullyQualifiedJpgSourceFileNameList = @()

#get fully-qualified file name (FullName) for all files in and below $topFolderNmae
$fullyQualifiedJpgSourceFileNameList = @((Get-ChildItem -recurse -LiteralPath $topSourceFolderName -File) | Select -Property FullName | sort -Property FullName)

#Copy each file to the single target directory, renaming each file as it is copied

$targetFileNameIndex = 0

foreach ($fullyQualifiedJpgSourceFileName in $fullyQualifiedJpgSourceFileNameList)
{
    #create fully qualified target file name for this jpg file
    #format $targetFileNameIndex so it has 8 leading digits
    #https://devblogs.microsoft.com/scripting/hey-scripting-guy-how-can-i-use-leading-zeroes-when-displaying-a-value-in-windows-powershell/
    $fullyQualifiedJpgTargetFileName = ($targetFolderName + "\" + $targetFileNameIndex.ToString("00000000") + ".jpg")

    #increment index for next jpg file copy
    $targetFileNameIndex = ($targetFileNameIndex + 1);

    Copy-Item -LiteralPath $fullyQualifiedJpgSourceFileName.FullName -Destination $fullyQualifiedJpgTargetFileName -Force
}

推荐阅读