Далается легко:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication9
{
class Program
{
static void Main(string[] args)
{
string sourcefolder = @"D:\Image2"; //папка в которой млн файлов
int filescount = 100; //количество файлов в 1 папке
int n = 0;
string targetfolder = @"D:\Новая папка (8)"; //папка в которой будут лежать другие папки
var files = Directory.GetFiles(sourcefolder, "*.jpg", SearchOption.AllDirectories);
for (int i = 0; i < files.Length ; i++)
{
if (i%filescount ==0)
{
n++;
string newfolder = targetfolder + string.Format("\\{0:00000000}", n);
Directory.CreateDirectory(newfolder);
}
string newfilename = targetfolder + string.Format("\\{0:00000000}\\{1}", n, Path.GetFileName(files[i]));
File.Copy(files[i], newfilename);
Console.WriteLine(newfilename);
}
}
}
}
После запуска она "разобьет" исходную папку на кучу более мелких по столько файлов сколько укажите. Код проверил. 100% работает.