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

时间:2019-09-14 09:03:26

标签: powershell file rename bulk-rename-utility

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

文件夹1 资料夹2 资料夹3 等等

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

001.jpg 002.jpg 003.jpg 等等

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

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

感谢您的帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

根据计算机的需要设置$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
}