Задать вопрос

Как перенести произвольное количество произвольных файлов в произвольную папку?

Задача такая:
Есть папка, в ней около 1млн файлов. В идеале нужно создать батник к которому обращаться с двумя параметрами:
1. Название создаваемой папки
2. Количество файлов

Как должен работать скрипт:
При обращении к нему берется произвольное количество файлов из папки и перемещается в только что созданную папку.
В идеале все это реализовать с помощью .bat (можно конечно питон или c#)
  • Вопрос задан
  • 430 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
Neuroware
@Neuroware
Программист в свободное от работы время
Далается легко:
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% работает.
Ответ написан
allexb
@allexb
App.Virtualization & Packaging
используйте
for /f %%f in ('dir /b c:\folder') do
добавьте счетчик на нужное количество файлов
Ответ написан
Комментировать
@YaroslavS
на питоне примерно так потестируй перед использованием
import shutil
import os
import sys
#читаеш аргументы командной строки
dest_folder = sys.argv[1]
count = int(sys.argv[2])
source_folder = 'you source folder'
#проверка есть ли папка
if not os.path.exists(dest_folder):
    os.mkdir(dest_folder)
# listdir получить список файлов в директории
#shutil.move перенос
for name in os.listdir(source_folder)[:count]:
    shutil.move(os.path.join(source_folder, name), os.path.join(dest_folder, ''))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы