Если для передачи, хранения или других целей вам потребовалось разделить большой файл на несколько частей, сделать это в Windows 11, 10 и предыдущих версиях системы можно несколькими способами: с помощью команд PowerShell и командной строки, в сторонних программах, или с помощью онлайн-сервисов, впрочем в последнем случае ОС не будет играть роли.
В этой инструкции подробно о нескольких способах разделить большой файл на несколько частей, а также кратко о разделении файлов различных типов: pdf и txt, видео и других.
Способы разделить большой файл на части
Эта часть инструкции не касается какого-то определенного типа файлов: разделяется любой файл, независимо от типа и содержимого — это может быть текстовый файл или двоичный, медиа или что-то ещё. Для большинства из них чтение станет невозможным до последующего объединения частей.
Разделение файла на несколько частей в PowerShell
Первая возможность — использовать команды и скрипты PowerShell.
FIleSplitter
Если вы не готовы самостоятельно писать такие скрипты, рекомендую использовать готовый модуль для разделения файлов:
- Запустите PowerShell от имени Администратора. В Windows 11 и Windows 10 это можно сделать, нажав правой кнопкой мыши по кнопке «Пуск» и выбрав пункт «Windows Powershell (Администратор)» или «Терминал Windows (Администратор)».
- Установите модуль FileSplitter с помощью команды
Install-Module -Name FileSplitter
в процессе потребуется подтвердить установку вводом Y и нажатием Enter.
- После того, как модуль установлен, в PowerShell будут поддерживаться две команды: Split-File для разделения файла и Join-File для его объединения.
Примеры использования команд:
Split-File -Path "C:\test.zip" -PartSizeBytes 2.5MB
Делит файл C:\test.zip на части размером 2.5 Мб с именами testzip.00.part, testzip.01.part и далее в том же расположении, где хранится оригинальный файл.
Join-File -Path "C:\test.zip"
Команда ищет файл c:\testzip.00.part и остальные части, объединяет их в файл C:\test.zip
Теперь несколько примеров скриптов PowerShell которые могут быть полезны, если вы захотите проработать свою реализацию.
Разделение текстового файла в PowerShell
Скрипт для разделения файла с текстовым содержимым (txt, log и других) на части установленного в первой строке размера, при этом разделение происходит по строкам без их обрыва посередине:
$upperBound = 1MB $ext = "txt" $rootName = "txt_" $reader = new-object System.IO.StreamReader("C:\text.txt") $count = 1 $fileName = "{0}{1}.{2}" -f ($rootName, $count, $ext) while(($line = $reader.ReadLine()) -ne $null) { Add-Content -path $fileName -value $line if((Get-ChildItem -path $fileName).Length -ge $upperBound) { ++$count $fileName = "{0}{1}.{2}" -f ($rootName, $count, $ext) } } $reader.Close()
Разделение и объединение произвольного двоичного файла
Скрипт для разделения произвольного файла на части:
function Split-Files { [CmdletBinding()] Param ( [Parameter(Mandatory = $true, ValueFromPipeLine = $true, ValueFromPipelineByPropertyName = $true)] [String] $InputFile, [Parameter(Mandatory = $true)] [String] $OutputDirectory, [Parameter(Mandatory = $false)] [String] $OutputFilePrefix = "chunk", [Parameter(Mandatory = $false)] [Int32] $ChunkSize = 4096 ) Begin { Write-Output "Beginning file split..." } Process { if (-not (Test-Path -Path $OutputDirectory)) { New-Item -ItemType Directory $OutputDirectory | Out-Null Write-Verbose "Created OutputDirectory: $OutputDirectory" } $FileStream = [System.IO.File]::OpenRead($InputFile) $ByteChunks = New-Object byte[] $ChunkSize $ChunkNumber = 1 While ($BytesRead = $FileStream.Read($ByteChunks, 0, $ChunkSize)) { $OutputFile = Join-Path -Path $OutputDirectory -ChildPath "$OutputFilePrefix$ChunkNumber" $OutputStream = [System.IO.File]::OpenWrite($OutputFile) $OutputStream.Write($ByteChunks, 0, $BytesRead) $OutputStream.Close() Write-Verbose "Wrote File: $OutputFile" $ChunkNumber += 1 } } End { Write-Output "Finished splitting file." } } function Unsplit-Files { [CmdletBinding()] Param ( [Parameter(Mandatory = $true)] [String] $InputDirectory, [Parameter(Mandatory = $false)] [String] $InputFilePrefix = "chunk", [Parameter(Mandatory = $true)] [String] $OutputDirectory, [Parameter(Mandatory = $true)] [String] $OutputFile ) Begin { Write-Output "Beginning file unsplit..." } Process { if (-not (Test-Path -Path $OutputDirectory)) { New-Item -ItemType Directory $OutputDirectory | Out-Null Write-Verbose "Created OutputDirectory: $OutputDirectory" } $OutputPath = Join-Path -Path $OutputDirectory -ChildPath $OutputFile $OutputStream = [System.Io.File]::OpenWrite($OutputPath) $ChunkNumber = 1 $InputFilename = Join-Path -Path $InputDirectory -ChildPath "$InputFilePrefix$ChunkNumber" while (Test-Path $InputFilename) { $FileBytes = [System.IO.File]::ReadAllBytes($InputFilename) $OutputStream.Write($FileBytes, 0, $FileBytes.Count) Write-Verbose "Unsplit File: $InputFilename" $ChunkNumber += 1 $InputFilename = Join-Path -Path $InputDirectory -ChildPath "$InputFilePrefix$ChunkNumber" } $OutputStream.close() } End { Write-Output "Finished unsplitting file." } }
Пример использования (импорт модуля, разбиение файла и объединение):
Import-Module C:\Split-Files.ps1 Split-Files -InputFile "путь_к_большому_файлу.zip" -OutputDirectory "путь_к_месту_сохранения" -ChunkSize РАЗМЕР_ЧАСТИ_В_БАЙТАХ -Verbose Unsplit-Files -InputDirectory "путь_к_месту_хранения_частей_файла" -OutputDirectory "путь_к_месту_сохранению_объединенного_файла" -OutputFile имя_объединенного_файла.zip
MakeCab
В Windows присутствует встроенная утилита для создания файлов .cab, которую можно использовать для разделения файла на части. Порядок действий:
- Создайте текстовый файл ddf.txt с содержимым:
.Set CabinetNameTemplate=test_*.cab; <-- Enter chunk name format .Set MaxDiskSize=900000; <-- Здесь вводим размер части .Set ClusterSize=1000 .Set Cabinet=on; .Set Compress=off; .set CompressionType=LZX; .set CompressionMemory=21 .Set DiskDirectoryTemplate=; путь_к_исходному_файлу
- Используйте команду
makecab /f путь_к_файлу_ddf.txt
в командной строке
- В результате в текущей рабочей папке командной строки будут созданы файлы .cab заданного размера.
- Для объединения файлов cab в исходный файл используйте команду
extrac32 filecab путь_к_объединенному_файлу
указывая путь к первому файл в очереди в качестве первого параметра.
Сторонние программы с функциями разделения файлов
Существуют сторонние приложения, специально предназначенные для разделения файлов на части, а также инструменты, которые имеют такую возможность как часть своего функционала. Начнем с самого распространенного варианта — архиваторы.
Архиваторы
Большинство архиваторов имеют возможность разделить создаваемый архив на несколько томов заданного размера. Если нам не требуется непосредственно архивация и нужно сэкономить место, достаточно создать архив без сжатия.
Например, в бесплатном архиваторе 7-Zip достаточно выбрать файл или файлы, нажать «Добавить», а потом настроить архив и размеры файлов, на которые он будет разбит, как на скриншоте ниже:
В WinRAR необходимые действия выполняются тем же образом, пример — на скриншоте:
В обоих случаях размер тома архива можно выбрать из списка, либо ввести вручную в соответствии с вашими потребностями. При использовании этого метода рекомендую использовать формат ZIP, как самый поддерживаемый.
Получить исходный файл можно просто положив все файлы архива в одно расположения и распаковав архив любым архиватором.
Total Commander
Известный многим архиватор Total Commander имеет опцию разбивки и сбора файлов в меню «Файл».
Достаточно выбрать файл на компьютере и использовать указанный пункт меню для разбивки файла с заданным размером частей.
В дальнейшем возможна сборка файла с помощью того же Total Commander.
Специальные утилиты для разбивки файлов
Также в Интернете вы можете найти множество утилит, которые специально предназначены для разделения файлов и их повторной сборки.
KFK File Splitter
Бесплатная утилита KFK имеет интерфейс на русском языке, достаточно понятный, чтобы объяснять, как именно им пользоваться не потребовалось, все действия для использования разбивки и обратной сборки очевидны:
Официальный сайт для загрузки KFK File Splitter — https://www.kcsoftwares.com/?kfk
FFSJ (File Splitter & Joiner)
FFSJ — программа, очень похожая на первую в списке, но без русского языка интерфейса. Выглядит как на изображении ниже:
В программе представлены две основные вкладки — для разделения и объединения файлов, а также третья — для просмотра контрольных сумм файлов.
GSplit
GSplit — одна из самых популярных программ для разделения файлов с хорошим набором дополнительных функций, но, к сожалению, без русского языка интерфейса.
Порядок простого использования GSplit:
- Выбираем исходный файл или несколько файлов в пункте «Original File».
- Задаем место сохранения разделенного файла в пункте «Destination Folder»
- Задаем размеры частей и тип частей в разделе Pieces — Type and Size.
- Запускаем разделение кнопкой Split.
В дальнейшем, когда потребуется, можно будет использовать кнопку Unite для объединения частей файлов.
Если требуется более простой подход и вариант настройки — используйте кнопку «Express» в меню программы. Также в инструменте вы найдете возможность создания «самообъединеняющихся» частей файлов: раздел Self-Uniting.
Скачать GSplit можно с официального сайта https://www.gdgsoft.com/gsplit
File Splitter (утилита командной строки)
Если вам требуется использование функций разделения файлов в командной строке, можно использовать консольную утилиту File Splitter, доступную бесплатно на GitHub разработчика https://github.com/dubasdey/File-Splitter
Пример использования утилиты:
fsplit -split 1024 kb c:\file.txt
Для объединения используем команду copy с параметром /a для текстовых и /b для произвольных двоичных файлов, пример:
copy /A test1.txt+test2.txt file.txt
Часто пользователям требуется разделить не произвольный файл, а вполне конкретный и не на части, которые нужно затем соединять, а на фрагменты, каждый из которых можно просмотреть отдельно. Для этого можно использовать соответствующие редакторы PDF, редакторы аудио и видеоредакторы. Также может иметь смысл использование онлайн-сервисов:
Для разделения PDF файлов на части или страницы:
- Официальный инструмент разделения PDF файлов от Adobe — https://www.adobe.com/acrobat/online/split-pdf.html
- Неофициальный онлайн-сервис, но на русском: https://pdf.io/ru/split/
- И множество других.
Для разделения MP3:
- Сервис разделения аудио-файлов от veed.io
- Aspose Audio Splitter https://products.aspose.app/audio/ru/splitter/mp3
- И другие — в Интернете подобных онлайн-сервисов предостаточно.
Надеюсь, есть читатели, для которых информация окажется востребованной. Если остаются вопросы или, возможно, есть дополнения к статье, жду вашего комментария.
Распределенное обучение с TensorFlow и Python
AI_Generated 05.05.2025
В машинном обучении размер имеет значение. С ростом сложности моделей и объема данных одиночный процессор или даже мощная видеокарта уже не справляются с задачей обучения за разумное время. Когда. . .
CRUD API на C# и GraphQL
stackOverflow 05.05.2025
В бэкенд-разработке постоянно возникают новые технологии, призванные решить актуальные проблемы и упростить жизнь программистам. Одной из таких технологий стал GraphQL — язык запросов для API,. . .
Распознавание голоса и речи на C#
UnmanagedCoder 05.05.2025
Интеграция голосового управления в приложения на C# стала намного доступнее благодаря развитию специализированных библиотек и API. При этом многие разработчики до сих пор считают голосовое управление. . .
Реализация своих итераторов в C++
NullReferenced 05.05.2025
Итераторы в C++ — это абстракция, которая связывает весь экосистему Стандартной Библиотеки Шаблонов (STL) в единое целое, позволяя алгоритмам работать с разнородными структурами данных без знания их. . .
Разработка собственного фреймворка для тестирования в C#
UnmanagedCoder 04.05.2025
C# довольно богат готовыми решениями – NUnit, xUnit, MSTest уже давно стали своеобразными динозаврами индустрии. Однако, как и любой динозавр, они не всегда могут протиснуться в узкие коридоры. . .
Распределенная трассировка в Java с помощью OpenTelemetry
Javaican 04.05.2025
Микросервисная архитектура стала краеугольным камнем современной разработки, но вместе с ней пришла и головная боль, знакомая многим — отслеживание прохождения запросов через лабиринт взаимосвязанных. . .
Шаблоны обнаружения сервисов в Kubernetes
Mr. Docker 04.05.2025
Современные Kubernetes-инфраструктуры сталкиваются с серьёзными вызовами. Развертывание в нескольких регионах и облаках одновременно, необходимость обеспечения низкой задержки для глобально. . .
Создаем SPA на C# и Blazor
stackOverflow 04.05.2025
Мир веб-разработки за последние десять лет претерпел коллосальные изменения. Переход от традиционных многостраничных сайтов к одностраничным приложениям (Single Page Applications, SPA) — это. . .
Реализация шаблонов проектирования GoF на C++
NullReferenced 04.05.2025
«Банда четырёх» (Gang of Four или GoF) — Эрих Гамма, Ричард Хелм, Ральф Джонсон и Джон Влиссидес — в 1994 году сформировали канон шаблонов, который выдержал проверку временем. И хотя C++ претерпел. . .
C# и сети: Сокеты, gRPC и SignalR
UnmanagedCoder 04.05.2025
Сетевые технологии не стоят на месте, а вместе с ними эволюционируют и инструменты разработки. В . NET появилось множество решений — от низкоуровневых сокетов, позволяющих управлять каждым байтом. . .
Нагромоздили кода вы не меряно, все это можно сделать гораздо компактнее.
Я не стал разбираться, т.к. реально много кода для такой задачи.
Из вашего описания не ясно как именно разбивать на строки:
1.брать первые несколько строк и писать в один файл, следующую порцию в другой и т.д.
2.берем одну строку кладем в первый файл, вторую — во второй и т.д., когда заканчиваются файлы начинаем снова с первого файла.
Пункт 2 реализовывается вообще элементарно в одном цикле чтения и с одним счетчиком файлов.
Пункт 1: нужно сначала подсчитать общее количество строк (можно циклом и счетчиком, а можно поиграть с find /c /v «» <имя файла>, понятно, что find будет работать гораздо быстрее, но не совсем понятно как find будет вести себя с пустыми строками, нужно поэксперименировать) и прикинуть по сколько строк будет приходиться на каждый из файлов. Затем с помощью for /f «skip=X» — читаем файл построчно с пропуском нужного количества строк, и подсчетом скопированных строк. Так же не сильно сложно. Я думаю, после ваших героических усилий вы сможете упростить ваш код.
Будут вопросы — кидайте сюда.
PS: PowerShell, конечно, гораздо мощнее, но его синтаксис кажется мне страшней, чем у батников, возможно это по тому, что то я язык cmd знаю, а пош до сих пор нет
Если есть многосточный текстовый файл, который нужно разделить на части — быстро и не вручную, то есть несколько вариантов для этого.
В порядке предпочтения/простоты использования и убывания приоритета:
1. С помощью Windows Powershell
Команда в одну строчку:
gc file.txt -readcount 1000 | ForEach-Object { $i=0 } { $_ | Out-File «new_file${i}.txt«; $i++}
gc — сокращенный вариант команды GetContent (чтение файла);
file.txt — исходный многострочный файл, который нужно разделить на несколько с меньшим количеством строк;
1000 — число строк в каждом файле на выходе;
new_file${i}.txt — маска для имени файлов на выходе, вместо ${i} будет инкремент числа от 0 и далее.
Это самый простой и быстрый вариант, причем Powershell легко справится с большими файлами (2 миллиона строк и более).
Условие: пользователь должен хоть чуть-чуть дружить с командной строкой.
Дальше можно не читать
2. С помощью BAT-файла
Создать текстовый файл со следующим содержимым:
Сохранить его с расширением BAT в пустую папку. Скопировать в эту же папку текстовый файл, который необходимо разделить на части, указав его название (см. 3 срочку) и нужное количество строк в финальных результирующих файлах (см. 5 срочку). Сохранить изменения в BAT-файле.
Запустить BAT-файл и дождаться окончания работы.
Чтобы вручную не набирать текст батника, его содержимое:
@Echo Off
SetLocal enabledelayedexpansion
Set list=big_text_file.txt
REM ## Количество строк в выходных файлах:
Set str=500Set Num=%str%& Set File=0
For /F «tokens=* usebackq delims=» %%i In («%list%») Do (
Set /a Num+=1
If !Num! GEQ %str% (
Set Num=0
Set /a File+=1
Set nFile=0!File!
Set nFile=!nFile:~-2!
Echo %%i>New_File!nFile!.txt
) Else Echo %%i>>New_File!nFile!.txt
)
Pause
Exit
3. С помощью Windows-приложения
Есть несколько таких программ — как бесплатных, так и платных.
Возможно, позже будут приведены примеры.
4. С помощью Web-приложения
Есть сайты, которые предлагают различные действия по форматированию и обработке файлов.
Некоторые из них при проверке совсем отказались работать, один отработал вроде бы корректно, но скачивать по-одному 30 текстовых файлов совсем не радовало — разработчики данного сервиса могли бы добавить архивирование пакета файлов в один, чтобы было удобно скачивать результат.
Также при использовании больших файлов — размером 100 Мб и более может быть проблемс с загрузкой — она может оборваться в процессе из-за нестабильного или низкоскоростного интернет-соединения, или у сервера параметр «max_upload_size» установлен на меньшее значение, чем ваш файл.
Еще один минус онлайн-сервисов — не стоит загружать на непонятно чьи сайты свои важные и конфиденциальные файлы.
Комментарии ()
Оставьте свой комментарий
С помощью BAT-файла
Создайте текстовый файл со следующим содержимым:
Сохранить его с расширением BAT в пустую папку. Скопировать в эту же папку текстовый файл, который необходимо разделить на части, указав его название (см. 3 срочку) и нужное количество строк в финальных результирующих файлах (см. 5 срочку). Сохранить изменения в BAT-файле.
Запустить BAT-файл и дождаться окончания работы.
Чтобы вручную не набирать текст батника, его содержимое:
@Echo Off
SetLocal enabledelayedexpansion
Set list=big_text_file.txt
REM ## Количество строк в выходных файлах:
Set str=500Set Num=%str%& Set File=0
For /F «tokens=* usebackq delims=» %%i In («%list%») Do (
Set /a Num+=1
If !Num! GEQ %str% (
Set Num=0
Set /a File+=1
Set nFile=0!File!
Set nFile=!nFile:~-2!
Echo %%i>New_File!nFile!.txt
) Else Echo %%i>>New_File!nFile!.txt
)
Pause
ExitЕще если выбрать в контекстном меню пункт изменить содержимое, в файле будет строка вроде этой Set list=Tree Aeon.txt — Tree Aeon в ней нужна чтобы задать имя разбиваемого файла, txt вероятно задать формать файла.
Потом нужно поместить бат файл и текстовый байлл в формате txt в пустую папку, запустить бат файл в режиме Администратора, дальше блокнот разобьется, но это дело долгое.