Windows環境で、大容量のファイルを分割したり分割されたファイルを結合したい場合、サードパーティーのアプリを使って対応するのが一般的ですが、コマンド操作に抵抗がないなら標準搭載のコマンドで対応することが可能です。
そこでここでは、Windowsの標準搭載コマンドでファイルを分割・結合する方法を解説します。
目次
行数でファイルを分割
分割したいファイルがテキスト形式の場合は、後述のファイルサイズでの分割に加えて、行数で分割することができます。
たとえば、test.txtというテキストファイルを1000行ごとに分割したいときは、以下のようにコマンドを実行します。
PS> $file = "E:\test.txt"; $i=0; Get-Content $file -Encoding UTF8 -ReadCount 1000 | % {$_ >"$($file).div$("{0:D2}" -f $i)"; $i++}
上のコマンドでファイルを分割すると、分割ファイルの名前は順に「test.txt.div01」「test.txt.div02」といった具合に名前が付きます。
ファイルサイズでファイルを分割
バイナリファイルなどは、ファイルサイズでファイルを分割することができますが、Get-Contentコマンドレットを使った方法ではメモリ消費が激しいため、以下のようなPowershellスクリプトを作成して分割するのがおすすめです。
たとえば、test.mp4という動画ファイルを50MBごとに分割したいときは、以下のようにスクリプトを記述します。
$file = “E:\test.mp4” ←分割対象のファイル
$chunkSize = 50MB ←分割するファイルサイズ
$fileStream = [System.IO.File]::OpenRead($file)
$buffer = New-Object byte[] $chunkSize
$i = 1
while ($bytesRead = $fileStream.Read($buffer, 0, $buffer.Length)) {
$chunkFileName = "$($file).div$("{0:D2}" -f $i)"
$outFs = [System.IO.File]::Create($chunkFileName)
$outFs.Write($buffer, 0, $bytesRead)
$outFs.Close()
$i++
}
$fileStream.Close()
上のスクリプトでファイルを分割すると、分割ファイルの名前は順に「test.mp4.div01」「test.mp4.div02」といった具合に名前が付きます。
分割されたファイルの結合
上に紹介した方法で分割したファイルを結合するときは、以下のようにコマンドプロンプトでcopyコマンドを使って結合するのがシンプルかつ高速でおすすめです。
> copy /b *.div* 結合した後のファイル名
なお、ワイルドカード指定では結合順がおかしくなるときは、以下のように結合する順にファイルを列記して結合します。
> copy /b ファイル1+ファイル2+ファイル3 結合した後のファイル名
あとがき
サードパーティーの圧縮解凍アプリの多くは、ファイルを分割結合する機能を搭載しているものが多く、それらのアプリが使えるならそちらの方が便利だと思いますが、Windowsの標準機能だけで対応するなら、ここで紹介したコマンドを使った方法が唯一の方法になるのではないでしょうか。ご活用あれ。