はじめに
コジマです。
今回はPowerShellでファイルの読み込みをしてみたいと思います。
想定
設定ファイルをPowerShellで読み込みたい!
というわけで設定ファイルを読み込んで、それを連想配列に格納する
というスクリプトを作っていきます。
今回作成するサンプルでは
C:\workの下のtest_params.txtというファイルを読み込んでいくことにします。
仕様
今回の仕様は以下の通り
- test_params.txtを読み込む
- 「KEY=PARAM」という書式に対応
- 先頭「#」はコメントとして処理する
- =を含まない行は無視する
- スペースは考慮しない(KEY名、PARAM名に含む)
- KEY名、PARAM名に「=」含む場合は考慮しない
- KEY名の重複は考慮しない
以下に紹介する「できるようになること」の内容をめいんとしているため
他の仕様はゆるゆるです。
#でコメントアウトするくらいはしておきます。
できるようになること
主な技術としては以下のものを使用
- 連想配列を使えるようになる
- ファイルを一行ずつ読み込んで処理する
foreachもやっぱり使うんですけど、別記事書いてるんでそれを参考にしてください。
【PowerShell】foreachで一気にフォルダを作る
実装
ソースコードは以下の通り
##################################################### # 設定ファイルを読み込んでキーと値を設定する # 仕様: # ・test_params.txtを読み込む # ・「KEY=PARAM」という書式に対応 # ・先頭「#」はコメントとして処理する # ・=を含まない行は無視する # ・スペースは考慮しない(KEY名、PARAM名に含む) # ・KEY名、PARAM名に「=」含む場合は考慮しない # ・KEY名の重複は考慮しない ##################################################### # 設定ファイルがあるフォルダ # *自分で書き換えてね* $WORK_FOLDER = "C:\work" # 設定ファイル # *自分で書き換えてね* $FILE_PARAM = "test_params.txt" # 設定ファイルがあるフォルダに移動 if(Test-Path $WORK_FOLDER){ cd $WORK_FOLDER }else{ Write "フォルダがありません。" exit } # 設定ファイルを読み込む $file = "" if(Test-Path $FILE_PARAM){ $file = $(Get-Content $FILE_PARAM) }else{ Write "設定ファイルがありません。" exit } #パラメータリストを連想配列で初期化 $list_param = @{} #1行ずつ読み込む foreach($line in $file){ #コメント処理 #「#」が先頭にある場合は飛ばす if($line.Substring(0,1) -eq "#"){ Write-Host "コメントだからスルー" continue } # 「=」を含むか確認 if($line.Contains("=")){ $tmp_list = $line.Split("=") # キーと値を設定 $list_param[$tmp_list[0]] = $tmp_list[1] Write-Host $list_param[$tmp_list[0]] }else{ Write-Host "=ないからスルー" } } Write-Host "終了"
こんな感じになりました。
バリデーションとしては
- ファイルの存在チェック
- 「=」のない行を無視
くらいにしております。
実務できちんと実装する場合には
先述した「仕様」で考慮しなかった部分など考慮する必要があります。
さいごに
PowerShellはこんなことやれたら便利だなーなんて思ったときに
ちょこちょこ書いています。
コマンド単位の解説などはその他PowerShellを取り扱うブログでも充実しているので
自分はめんどくさい実務をちょっと楽にするためのアイデアな形を取っています。
今後ともよろしくね!
この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!
以上、コジマでした。