0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PowerShellにコピペするだけでファイルを指定行数で分割できるやつ

Last updated at Posted at 2021-01-01

何をしたいん?

  1. MariaDBをレプリケーションしてる。
  2. プライマリとセカンダリ間で正常にレプリケーションできてるか確認したい。
  3. プライマリとセカンダリの両方からmysqldumpしたファイルをWinMergeで差分チェックしよう!
  4. 1ファイルあたりの行数多すぎるとWinMergeで比較できない…(´・ω・`)

ということで、mysqldumpしたファイルを指定行数で分割したいわけどす。

コピペで使えるスクリプト

先頭の『ファイルパス』『エンコード』『分割行数』を書き換えて、PowerShellに貼り付ければ使えるやつを作ってみました。

$file_path = 'ファイルパス';
$encode = 'UTF8'; #SJISなら『default』
$row_size = 100; #分割行数
$file_name = $(Get-ChildItem $file_path).BaseName;
$file_extenstion = [System.IO.Path]::GetExtension($file_path);
$parent_folder_path = Split-Path $file_path -parent;
$i = 0;
cat $file_path -ReadCount $row_size -Encoding $encode | % {
	$tmp_file_path = $parent_folder_path + '\tmp' + $i + $file_extenstion;
	$output_file_path = $parent_folder_path + '\' + $file_name + '_' + $i + $file_extenstion;
	$_ > $tmp_file_path;
	get-content -Encoding Unicode $tmp_file_path | Set-Content -Encoding $encode $output_file_path;
	Remove-Item $tmp_file_path;
	$i++;
}

このスクリプトのちょっとダメなとこ

  • エンコードし直しの為に一時ファイルに出力してる。(tmpという名前のファイルは分割できない)
  • 分割元のファイルのエンコードは『UTF8』『SJIS』のみ対象。
  • 分割後のファイルと同名のファイルがあったら上書きされちゃう。

ちょっとスマートじゃないなあ…(´・ω・`)
あくまで個人用のぷちツールです。

実行するとこんな感じ

  • 分割元のファイルと同じフォルダに分割後のファイルが作成されます。
  • 分割元のファイルはそのまま残ります。
  • 分割元のファイル名と拡張子を引き継いでファイルを分割します。
  • 分割後のファイル名には通し番号が付きます。

image.png

何で一時ファイルに出力してからエンコードし直してるの?

  1. PowerShellのデフォルトのエンコードはUTF-16。
  2. 上記の為に $_ > の箇所で出力されるファイルのエンコードはUTF-16になってしまう。
  3. パイプ処理の中でエンコードを指定すればいいんだろうけど、やり方分からんかった…(´・ω・`)

妥協して一時ファイル出力してます。

蛇足

汎用性持たせたり例外処理も盛り込みたいならC#でexe作った方がいいと思います。

バージョン

Windows10 Pro バージョン20H2 OSビルド19042.685
PSVersion 5.1.19041.610

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?