Amazon

2012年8月1日水曜日

バッチファイルでファイルの一部を文字列置換する方法



かなり前に、バッチファイルで実行結果を環境変数に格納する方法を書きました。


今回は、その方法を一部応用して設定ファイルの一部を書き換える方法を考えました。


zabbix-agentdの設定ファイルのように一部をhostnameコマンドの結果で置き換えるような用途に使えます。


サンプル


Windowsにもhostnameコマンドがあります。



C:\temp>hostname
win10

C:\temp>


repl.batは、前半でhostnameコマンドの結果をHNAME環境変数に設定します。


後半で第一引数に指定したファイルを読み込んで第二引数に指定した文字列をHNAME環境変数で置き換えます。



C:\temp>type repl.bat
@echo off

setlocal enabledelayedexpansion
for /f "usebackq tokens=*" %%i in (`hostname`) do @set HNAME=%%i

for /f "delims=" %%A in (%1) do (
set line=%%A
echo !line:%2=%HNAME%!
)
endlocal
C:\temp>


実行


百聞は一見にしかず、実行してみます。


repl.batのlineをhostnameコマンドの結果で置換します。



C:\temp>repl.bat repl.bat line
@echo off
setlocal enabledelayedexpansion
for /f "usebackq tokens=*" %%i in (`hostname`) do @set HNAME=%%i
for /f "delims=" %%A in (%1) do (
set win10=%%A
echo set win10=%%A
)
endlocal
C:\temp>


難点は、空行は無視されます。


上記の結果のように環境変数の置換があるとエスケープしてくれないようです。


このあたりは、割り切りでしょう。


なかなか、応用範囲が広くなりました。





0 件のコメント: