テキストファイルを行数を指定して分割したい

WindowsのPCで、テキストファイルを行数を指定して分割したいと思ったことはありませんか?ログなどのテキストファイルを取り扱う際に特定の行数で分割して扱いやすくしたいというケースも珍しくないと思います。この記事では、テキストファイルを行数を指定して分割する方法をご紹介していきます。
テキストファイルを行数を指定して分割する方法
それでは、テキストファイルを行数を指定して分割する方法を説明します。まずはWindows PowerShellからテキストファイルを行数を指定して分割する方法です。デスクトップ画面左下のスタートボタンをクリックしてスタートメニューを開き、「すべてのアプリ」から「Windows PowerShell」をクリックしましょう。

PowerShellが起動したら、コマンドを入力します。コマンドは「$i=1; cat .\[分割対象ファイル] -ReadCount [分割行数] | % { $_ > [分割後ファイル名]_$i.txt;$i++ }」です。「分割行数」で分割したい行数を数字で入力して指定すればOKです。
これで、テキストファイルを指定した行数で分割してそれぞれファイルとして保存させることができますよ。

もっと手軽にテキストファイルの分割を行うには、スクリプトファイルを作成します。メモ帳アプリなどのテキストエディタを起動したら、下記のスクリプトを入力しましょう。そして「ファイル」→「名前を付けて保存」ダイアログボックスからファイルの保存を行う際に拡張子を「.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 [作成したスクリプトファイルのパス]」を入力し「次へ」をクリック](http://s3.ap-northeast-1.amazonaws.com/static.aprico-media.com/production/imgs/images/000/092/557/original.jpg?1671435276)
「ショートカットの作成」ダイアログボックスが表示されます。「項目の場所を入力してください」入力欄に「powershell -ExecutionPolicy RemoteSigned -windowstyle hidden -File [作成したスクリプトファイルのパス]」を入力したら「次へ」をクリックしましょう。

続いて、「このショートカットの名前を入力してください」欄でショートカット名を入力します。名前は自由に決めてOKです。入力できたら「完了」をクリックしましょう。

これで、デスクトップ画面にスクリプトファイルのショートカットが作成されました。あとはこのショートカットに分割したいテキストファイルをドラッグ&ドロップすると「分割行数」ダイアログボックスが表示されるので、行数を数字で入力して「OK」をクリックすればテキストファイルの配置されているフォルダに分割されたテキストファイルが連番で保存されますよ。