動画や大きなデータを送りたいのに、メールやチャットツールの容量制限に引っかかって送れない…… 、こんな風に困ったことはありませんか?
ZIPファイルにしても大して縮小されない事も多々あると思います。
クラウドストレージを使うのも手ですが、会社のセキュリティルールで禁止されていたり、相手の環境によってはダウンロードできなかったりすることもありますよね。
実は、怪しい外部ソフトをわざわざインストールしなくても、Windowsに最初から入っている機能だけで、大きなファイルを小分けに「分割」して送り、受け取った側で元の1つに「結合」することができます。
本記事では、誰でもすぐに実践できる「PowerShellを使った方法」を、分かりやすく解説します!
もちろんZIPファイルでも分割できます
powershellで分割方法

このファイルを分割します
(コマンドで100Mと1Gのファイルを作りました。)
Powershellを起動
検索窓で「powershell」を検索して、出てきたPowershellを起動します。
※「powershell ISE」でも問題ありませんが、統合開発環境なので紛らわしいので、ISEじゃない方が良いかな
(X86)って方も有りますが、最近のPCなら(X86)無しの方を選んでおけばOKです。

ファイルパスを取得しておきます
指定のファイルをキーボードの「Shift」を押しながら、マウスの右クリックで出てきます

Powershellのコマンドです
$file = "ファイルパス" # 分割したいファイルのパス
$size = 400MB # 分割したいサイズ(10MB、500KB、1GB など指定可能)
$buffer = New-Object byte[] $size
$reader = [System.IO.File]::OpenRead($file)
$count = 1
while ($bytesRead = $reader.Read($buffer, 0, $buffer.Length)) {
$outputPath = "$file.part$count"
$writer = [System.IO.File]::OpenWrite($outputPath)
$writer.Write($buffer, 0, $bytesRead)
$writer.Close()
$count++
}
$reader.Close()
上のコマンドをコピーしてpowershellにペーストします。
※ファイルパスとサイズは自身の環境に合わせて

分割されました
1ギガを400Mで分割したので、3ファイルになりました
100Mは50Mで分割したので、2ファイルです

ファイル結合
分割したら、相手に渡します
渡されたら、今度は結合します。
powershellで実行
powershellで実施する場合は下記のコマンドで実施してください。
Get-Content "ファイルパス\分割したファイル名.part1", "ファイルパス\分割したファイル名.part2", "ファイルパス\分割したファイル名.part3" -Encoding Byte -Raw | Set-Content "ファイルパス\結合後のファイル名" -Encoding Byte #この方法でも可能 #こっちは"分割したファイル名.part*"で、*(ワイルドカード)でpartXXとなっているファイルを全部結合します Get-Content "ファイルパス\分割したファイル名.part*" -Encoding Byte -Raw | Set-Content "結合後のファイル名" -Encoding Byte
実験の時はファイルパスをしているスト長くて面倒なので、対象のフォルダに移動して実行してます
cd “ファイルパス”
で移動できます
※ファイルは指定しないでフォルダを指定してください


エラーになったら
1Gのファイルを結合しようとしたら下記のエラーになりました。
結合するファイルが大きいとエラーになるようなので、こうなったら次のコマンドで実施してくださいSystem.OutOfMemoryException(メモリ不足エラー)

# 出力先ファイルを指定してストリームを開く
$target = [System.IO.File]::Create("$PWD\結合後のファイル名")
# 結合したいファイルを順番に処理する
"ファイルパス\分割したファイル名①", "ファイルパス\分割したファイル名②", "ファイルパス\分割したファイル名③" | ForEach-Object { ;
$fullPath = Join-Path $PWD $_ ;
$bytes = [System.IO.File]::ReadAllBytes($fullPath);
$target.Write($bytes, 0, $bytes.Length) } ;
#最後に必ず閉じる
$target.Close()

結合するのに少々時間が掛かります。
成功するとファイルが出来ます

コマンドプロンプトで実行
コマンドプロンプトでもできます
copy /b "ファイルパス\分割したファイル名.part1" + "ファイルパス\分割したファイル名.part2" + "ファイルパス\分割したファイル名.part3" "ファイルパス\結合後のファイル名"
こっちも同じくファイルがあフォルダへ移動して実行します
コマンドプロンプトではサイズが大きくても警告は出ないですね




コメント