如何批量重命名多个文件夹中的多个文件并将它们合并到一个大文件夹中?

How to batch rename multiple files across multiple folders and combine them into one massive folder?

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

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

每个文件夹中包含的图片也是按顺序排列的

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

最终,我试图将这 100 多个文件夹合并到一个巨大的文件夹中,并根据它们的顺序将所有图像放入其中,将每张图像重命名为 000000001 - 99999999。

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

感谢任何帮助。

谢谢!

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

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

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

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

我假设您的 "one massive folder" ($targetFolderName) 不在单父文件夹 ($topSourceFolderName)

下的任何位置

我假设 PowerShell 脚本存储在 $topSourceFolderName$targetFolderName

以外的文件夹中

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

In my example, the PowerShell script is stored in c:\temp\bulkConsolidate.ps1

C:\Temp\massiveFolder is the target folder. It is initially empty.

C:\Temp\topFolder\Folder 1 has 001.jpg and 002.jpg

C:\Temp\topFolder\Folder 2 has 001.jpg and 002.jpg

After the script is run, C:\Temp\massiveFolder has 00000001.jpg, 00000002.jpg, 00000003.jpg, and 00000004.jpg

00000001.jpg is copied from C:\Temp\topFolder\Folder 1[=18=]1.jpg

00000002.jpg is copied from C:\Temp\topFolder\Folder 1[=18=]2.jpg

00000003.jpg is copied from C:\Temp\topFolder\Folder 2[=18=]1.jpg

00000004.jpg is copied from C:\Temp\topFolder\Folder 2[=18=]2.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
}