Here's the minimum script needed to meet your requirements. There's no error checking.
Set $topSourceFolderName
and $targetFolderName
as needed for your computer
I assume your 100+ folders, Folder 1 Folder 2 Folder 3 etc. all exist under a single parent folder ($topSourceFolderName
)
I assume the single parent folder and all of the 100+ folders under the single parent folder contain only jpg files
I assume your "one massive folder" ($targetFolderName
) is NOT anywhere under the single parent folder ($topSourceFolderName
)
I assume the PowerShell script is stored in a folder other than $topSourceFolderName
or $targetFolderName
Email me at william.s.charlton@outlook.com if you have any questions
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\001.jpg
00000002.jpg is copied from C:\Temp\topFolder\Folder 1\002.jpg
00000003.jpg is copied from C:\Temp\topFolder\Folder 2\001.jpg
00000004.jpg is copied from 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
}