PowerShell(パワーシェル)で指定した行のテキストを抜き出す
この記事でやること
PowerShell(パワーシェル)で、テキストファイルから指定した行のテキストを抽出するためのバッチを作成します。
実行環境は「Windows 10、Visual Studio Code」です。
インプットとなるテキストファイルの文字コードはShift JISを例としています。
出力までの流れ
①任意の場所にプログラム(仮名:get_line.ps1)を配置し、
テキストファイルも同じディレクトリに配置します。
テキストファイルは以下のような文字が保存されています。
最終的にそれぞれのファイルの2行目を抽出します。
②Visual Studio Codeで「get_line.ps1」を実行します。
※拡張機能「PowerShell」のインストールが必要
③「list.txt」が出力されます。
「1_text.txt、2_text.txt、3_text.txt」の2行目だけが「list.txt」に書き込まれています。
プログラム
プログラムは以下の通り。
補足1:5行目 ⇒ (*_text.txt)後方一致で抽出対象のファイル一覧を取得
補足2:13行目 ⇒ 一時ファイルを作成
補足3:16行目(findstr /n /r “.” $reName) ⇒ 行数を含める
補足4:16行目(findstr /r “^2:”) ⇒ 2行目で絞込
補足5:16行目(.Remove(0, 2)) ⇒ 2行目をあらわす文字「2:」を削除
補足6:19行目 ⇒ 一時ファイルを削除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# エンコードをUTF8に変更 $OutputEncoding = [Text.Encoding]::UTF8; # ファイル一覧を取得する $fileList = Get-ChildItem -Recurse -File -Include *_text.txt; foreach($file in $fileList) { # ログ Write-Host $file.Name; # 文字コード変換 $reName = 're_'+$file.Name; get-content $file.Name | Set-Content -Encoding UTF8 $reName; # 2行目切り出し (findstr /n /r "." $reName | findstr /r "^2:").Remove(0, 2) >> list.txt; # ファイル削除 Remove-Item $reName; } # エンコードをデフォルトに戻す $OutputEncoding = [Text.Encoding]::Default |
補足
なぜかWindows 標準のPowerShell(青い画面のやつ)だと出力した際に日本語が文字化けしました。。
Visual Studio Codeで出力すると文字化けせずに出力できました。
PowerShellは文字コードの取り扱いがややこしそうなので参考まで。
最後までお読みいただきありがとうございました^^
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント