バッチファイルでひな形テキストとCSVファイルを元に一括ファイル作成 [Windowsバッチファイル]
構築作業に携わることになり、入力するコマンドをまとめたテキストファイルを作成することが頻繁に発生すると知った。
これらの作業を手作業でコピペしたり、置換を行ったりするのは手間であると同時にミスを誘発する原因になりかねない。
そこで、ひな形となるテキストファイルと変数となる値(IPアドレスやホスト名など)の一覧を記載したCSVファイルを作成し、これらを元にバッチファイルを利用して一括でファイルを作成できないかと考えた。
以下、メモ。
必要なファイル(計3個)
・ファイル名: Hinagata.txt
⇒ひな形となるテキストファイルであり、置換対象文字列が記載されている。
なお、それ以外の部分は共通
====以下ソースコード====
ここの位置は「☆位置☆」
IPアドレスは「☆IPアドレス☆」
ホスト名は「☆ホスト名☆」
データ名は「☆データ名☆」
=======ここまで=======
・ファイル名: IP_Host.csv
⇒ファイルごとに異なる値の一覧(位置、IPアドレス、ホスト名など)
====以下ソースコード====
位置,IPアドレス,ホスト名,データ名
1-1,aaa.aaa.aaa.aaa,ホストA,データA
1-5,bb.bbb.bb.bb,ホストB,データB
2-3,cc.cc.cc.cc,ホストC,データC
4-1,ddd.dd.dd.ddd,HostD,DataD
4-2,ee.eee.ee.ee,hostE,データE
5-7,ff.ff.fff.ff,ホストF,データF
=======ここまで=======
・ファイル名: readreplace_conv.bat
⇒実行バッチファイル
====以下ソースコード====
@echo off
rem このバッチが存在するフォルダをカレントに
pushd %0\..
rem forループ内の環境変数を遅延展開する
SETLOCAL enabledelayedexpansion
rem CSVファイル名
set csvfile=IP_Host.csv
rem ひな形ファイルを指定
set hinagata=Hinagata.txt
rem フィールド数の設定
set tokens=1,2,3,4
rem ひな形ファイルを読み込み、CSVファイルから引数を読んで置換していく
for /f "tokens=1* delims=" %%a in (%hinagata%) do (set line=%%a
for /f "skip=1 eol=# tokens=%tokens% delims=," %%i in (%csvfile%) do (
set boo=!line:☆位置☆=%%i!
set coo=!boo:☆IPアドレス☆=%%j!
set doo=!coo:☆ホスト名☆=%%k!
set eoo=!doo:☆データ名☆=%%l!
echo !!eoo!>>^
sample_%%i%.txt
)
)
pause
exit
=======ここまで=======
※なお、各ファイルの変数部分や置換対象文字列、値一覧などは必要に応じて適宜変更とする
■実行方法
1.構築資材を配置するフォルダを作成する
2.作成したフォルダに上記の3ファイル(Hinagata.txt、IP_Host.csv、readreplace_conv.bat)を配置する
3.『readreplace_conv.bat』をダブルクリックで実行する
4.フォルダ内にCSVファイルの値に応じたテキストファイルが一括で作成される
5.作成されたテキストファイルを確認
6.問題がなければ完了
問題があった場合は、作成されたテキストファイルをすべて削除。
7.3ファイルの該当箇所を修正し、「3.」から再度実施
参考:できる!TeraTermマクロ:TeraTermマクロをバッチファイルから実行する
参考:Kumasoftの活動日誌:BATファイル CSVの読み込み
参考:プログラムぺろぺろ:WindowsバッチでCSVを処理する方法
参考:BATのforループで,「0埋めされた数値」を連番で出力しよう (環境変数の遅延展開と,数値の大小比較判定の方法)
スポンサードリンク
これらの作業を手作業でコピペしたり、置換を行ったりするのは手間であると同時にミスを誘発する原因になりかねない。
そこで、ひな形となるテキストファイルと変数となる値(IPアドレスやホスト名など)の一覧を記載したCSVファイルを作成し、これらを元にバッチファイルを利用して一括でファイルを作成できないかと考えた。
以下、メモ。
必要なファイル(計3個)
・ファイル名: Hinagata.txt
⇒ひな形となるテキストファイルであり、置換対象文字列が記載されている。
なお、それ以外の部分は共通
====以下ソースコード====
ここの位置は「☆位置☆」
IPアドレスは「☆IPアドレス☆」
ホスト名は「☆ホスト名☆」
データ名は「☆データ名☆」
=======ここまで=======
・ファイル名: IP_Host.csv
⇒ファイルごとに異なる値の一覧(位置、IPアドレス、ホスト名など)
====以下ソースコード====
位置,IPアドレス,ホスト名,データ名
1-1,aaa.aaa.aaa.aaa,ホストA,データA
1-5,bb.bbb.bb.bb,ホストB,データB
2-3,cc.cc.cc.cc,ホストC,データC
4-1,ddd.dd.dd.ddd,HostD,DataD
4-2,ee.eee.ee.ee,hostE,データE
5-7,ff.ff.fff.ff,ホストF,データF
=======ここまで=======
・ファイル名: readreplace_conv.bat
⇒実行バッチファイル
====以下ソースコード====
@echo off
rem このバッチが存在するフォルダをカレントに
pushd %0\..
rem forループ内の環境変数を遅延展開する
SETLOCAL enabledelayedexpansion
rem CSVファイル名
set csvfile=IP_Host.csv
rem ひな形ファイルを指定
set hinagata=Hinagata.txt
rem フィールド数の設定
set tokens=1,2,3,4
rem ひな形ファイルを読み込み、CSVファイルから引数を読んで置換していく
for /f "tokens=1* delims=" %%a in (%hinagata%) do (set line=%%a
for /f "skip=1 eol=# tokens=%tokens% delims=," %%i in (%csvfile%) do (
set boo=!line:☆位置☆=%%i!
set coo=!boo:☆IPアドレス☆=%%j!
set doo=!coo:☆ホスト名☆=%%k!
set eoo=!doo:☆データ名☆=%%l!
echo !!eoo!>>^
sample_%%i%.txt
)
)
pause
exit
=======ここまで=======
※なお、各ファイルの変数部分や置換対象文字列、値一覧などは必要に応じて適宜変更とする
■実行方法
1.構築資材を配置するフォルダを作成する
2.作成したフォルダに上記の3ファイル(Hinagata.txt、IP_Host.csv、readreplace_conv.bat)を配置する
3.『readreplace_conv.bat』をダブルクリックで実行する
4.フォルダ内にCSVファイルの値に応じたテキストファイルが一括で作成される
5.作成されたテキストファイルを確認
6.問題がなければ完了
問題があった場合は、作成されたテキストファイルをすべて削除。
7.3ファイルの該当箇所を修正し、「3.」から再度実施
参考:できる!TeraTermマクロ:TeraTermマクロをバッチファイルから実行する
参考:Kumasoftの活動日誌:BATファイル CSVの読み込み
参考:プログラムぺろぺろ:WindowsバッチでCSVを処理する方法
参考:BATのforループで,「0埋めされた数値」を連番で出力しよう (環境変数の遅延展開と,数値の大小比較判定の方法)
スポンサードリンク