2
1

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 5 years have passed since last update.

【PowerShell】ディレクトリ内のdatファイルの最終行を削除する

Last updated at Posted at 2018-03-16

#困ったことに
・csvでほしかったデータがdatファイルできた
・なぜか最終行に半角スペースが入っているため、そのままだとPostgreSQLにインポートすることができない
・わりとたくさんファイルがある

#やりたいこと
・ディレクトリ内にあるすべてのdatファイルの最終行だけを削除したい
・datファイルからcsvファイルへ変換したい

#はじめてのPowerShell
最初はJavaでやろうとしたのだけど、機種依存文字が含まれていてどうしても文字化けしてしまうので、バッチでやることにした。しかしDOS バッチでファイルの最終行を削除することは難しそうだったので、PowerShellを使ってみることにした。シェルスクリプトは触ったことがあるけどPowerShellは初めてだったので起動から全部調べたよー。

以下、私のように初めてPowerShellを触る人へ。

※ちなみに環境はWindows7です

###1. 起動方法
Windows + RでPowerShellを検索

###2. 試しに動かしてみる
ディレクトリ内のdatファイル情報がずらーっと出てくるはず

cd C:\work # ワークディレクトリに移動
Get-ChildItem * -include *.dat # ディレクトリ内のdatファイルを取得

###3. PowerShellスクリプトファイルを作る

test.ps1
$List=Get-ChildItem * -include *.dat
foreach($file in $List) {
	$data = Get-Content $file                   #ファイルの中身を取得
	$name = $file.name -replace ".dat", ".csv"  #出力ファイル名(拡張子をcsvに置換)
	$length = $data.length -1                   #最終行番号を取得。配列のインデックスにするので-1をする
	$data[$length] = $null                      #最終行を削除
	$data | Out-File $name -Encoding default    #csv拡張子でファイル出力
}

###4. 実行
この時はじめてps1ファイルを実行する人は実行ポリシーにひっかかってできないはず。
詳しくはここらへんのサイトをみてね。
WindowsでPowerShellスクリプトの実行セキュリティポリシーを変更する

# 実行ポリシーの変更(とりあえず今回ローカルファイルを動かせればOK)
Set-ExecutionPolicy RemoteSigned
# 実行
.\test.ps1

で、ターゲットディレクトリ内(この場合はC:\WORK)内のdatファイルはすべて最終行は削除され、拡張子が.csvになってファイル生成されましたとさ。動きとしては、ファイルから最終行を削除したっていうよりかは最終行以外をコピーしたcsvファイルを作ったっていうほうが正しいかな?実際ターゲットディレクトリ内には元のdatファイルとcsvファイルが混在してました。

他のもっとうまいやり方があるような気がするけど、今回は私の要件を満たしていたため、これでよしとします。

#参考サイト
WindowsでPowerShellスクリプトの実行セキュリティポリシーを変更する
PowerShellでsed相当の処理を行う

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?