Windowsでテキストファイルを行数指定で分割する

大容量のテキストファイル(ログ等)を、扱いやすいサイズやすぐに開けるサイズに分割したい時があり、方法を調べたので紹介したいと思います。

ちなみにLinuxではsplitコマンドを使用すれば簡単に実施できます。

WindowsではPowerShellを使用することでテキストファイルを行数指定で分割することができます。

スポンサーリンク

テキストファイルを行数指定で分割する

PowerShellで、分割するテキストファイルが配置されているフォルダーに移動して、以下のように実行します。

$i=1; cat .\[分割対象ファイル] -ReadCount [分割行数] | % { $_ > [分割後ファイル名]_$i.txt;$i++ }

コマンド実行例)

PS C:\Users\Demo\Desktop\demo> $i=1; cat .\test.txt -ReadCount 3 | % { $_ > test_$i.txt;$i++ }
PS C:\Users\Demo\Desktop\demo> dir


    ディレクトリ: C:\Users\Demo\Desktop\demo


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2020/06/20     23:07           2550 test.txt
-a----       2020/06/21      1:01           1022 test_1.txt
-a----       2020/06/21      1:01           1022 test_2.txt
-a----       2020/06/21      1:01           1022 test_3.txt
-a----       2020/06/21      1:01           1022 test_4.txt
-a----       2020/06/21      1:01           1022 test_5.txt


PS C:\Users\Demo\Desktop\demo>

簡単にファイル分割できます。

PowerShellの使い方がよくわからないという方や、何回も分割することがある場合は次の方法も参考にしてください。

テキストファイルのファイル分割をドラッグ&ドロップで実行する

毎回コマンドで実行するのが面倒だという場合のために、スクリプトファイルを作ってみました。コマンドで実行する場合と異なりすごく長いですが、1度作成しておけば何度も使うことができます。コマンドを忘れてしまった時も問題ありません。

スクリプトファイルの作成

メモ帳等のテキストエディターに以下の内容をコピーし、拡張子は「.ps1」で保存してください。ファイル名は任意で問題ありません。

# アセンブリ読み込み
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# 分割する行数のフォーム作成
$form = New-Object System.Windows.Forms.Form
$form.Text = "分割行数"
$form.Size = New-Object System.Drawing.Size(260,180)

# OKボタンの設定
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(40,100)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.DialogResult = "OK"

# キャンセルボタンの設定
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(130,100)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "キャンセル"
$CancelButton.DialogResult = "Cancel"

# ラベルの設定
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,30)
$label.Size = New-Object System.Drawing.Size(250,20)
$label.Text = "分割する行数を入力してください。"

# 入力ボックスの設定
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,70)
$textBox.Size = New-Object System.Drawing.Size(225,50)

# キーとボタンの関係
$form.AcceptButton = $OKButton
$form.CancelButton = $CancelButton

# ボタン等をフォームに追加
$form.Controls.Add($OKButton)
$form.Controls.Add($CancelButton)
$form.Controls.Add($label)
$form.Controls.Add($textBox)

#フォームを常に手前に表示
$form.Topmost = $True

#フォームをアクティブにし、テキストボックスにフォーカスを設定
$form.Add_Shown({$textBox.Select()})

# 引数チェック
if([string]::IsNullorEmpty($Args[0])) {
    [System.Windows.Forms.MessageBox]::Show("分割するファイルが指定されていません。", "分割ファイル指定エラー")
    exit
}

# ファイルの存在チェック
if(-not(Test-Path $Args[0])){
    [System.Windows.Forms.MessageBox]::Show("分割対象ファイルが存在しません", "ファイル指定エラー")
    exit
}

# フォームの表示
$result = $form.ShowDialog()

if ($result -eq "OK") {
    $Line = $textBox.Text
}
else {
    exit
}

# 分割行数が数値か確認
if (-not([int]::TryParse($Line,[ref]$null))) {
    [System.Windows.Forms.MessageBox]::Show("数値以外の値が入っているため、処理を終了します。", "分割行数指定エラー")
    exit
}

# 分割後ファイル名指定用
$FileBaseName = [System.IO.Path]::GetFileNameWithoutExtension($Args[0])
$FileExtension = [System.IO.Path]::GetExtension($Args[0])
$FilePath = Split-Path -Parent $Args[0]

$i=1

# ファイル分割
cat $Args[0] -ReadCount $Line | % { $_ > $FilePath\$FileBaseName"_"$i$FileExtension;$i++ }

スクリプトファイルの準備できましたが、このままでは使い勝手が悪いためショートカットを用意します。「項目の場所を入力してください(リンク先)」を以下の内容でショートカットを作成してください。

powershell -ExecutionPolicy RemoteSigned -windowstyle hidden -File [作成したスクリプトファイルのフルパス]

ショートカットの作り方がわからない場合は以下の記事をご覧ください。

スポンサーリンク

スクリプトファイルの使い方

スクリプトファイルを実行するには、作成したショートカットを使用します。ここではショートカットを「split」という名前で作成し、「test.txt」ファイルを分割する場合を例にして説明します。

  1. 分割したいテキストファイル「test.txt」をショートカット「split」にドラッグ&ドロップします。
    ショートカットにテキストファイルをドラッグ&ドロップする画像
  2. 「分割行数」画面が表示されるため、分割したい行数を入力し[OK]をクリックします。
    「分割行数」画面の画像
  3. 元のフォルダーに「ファイル名_[連番]」の形でファイルが作成されます。
    ファイル分割後の画像

この形であれば、分割する行数が変わっても簡単に実行することができます。

コメント

タイトルとURLをコピーしました