Windows tips‎ > ‎MS-DOS, CMD‎ > ‎

バッチファイルで文字列置換

バッチファイルでテキストファイルの文字列置換がしたい。
どうしてもDOS窓でテキスト置換がしたい。
そんな場合の手管。

rem ## "userID"を"root"に置換する使用例
copy ftp_GET_cmd.txt ftp_GET_cmd.txt.tmp
call :proc_replace_main ftp_GET_cmd.txt.tmp userID root
goto end

:proc_replace_main
echo Dim MyFile > tmp_proc_replace.vbs
echo Dim myRec >> tmp_proc_replace.vbs
echo Dim FS >> tmp_proc_replace.vbs
echo Set FS = CreateObject("Scripting.FileSystemObject") >> tmp_proc_replace.vbs
echo Set MyFile = FS.OpenTextFile("%1") >> tmp_proc_replace.vbs
echo myRec = MyFile.ReadAll >> tmp_proc_replace.vbs
echo myRec = replace(myRec,"%2","%3") >> tmp_proc_replace.vbs
echo MyFile.Close >> tmp_proc_replace.vbs
echo Set MyFile = FS.CreateTextFile("%1") >> tmp_proc_replace.vbs
echo MyFile.WriteLine (myRec) >> tmp_proc_replace.vbs
echo MyFile.Close  >> tmp_proc_replace.vbs
cscript //NoLogo tmp_proc_replace.vbs %1 %2 %3
del tmp_proc_replace.vbs
goto :EOF

:end

VBS作って流してるだけじゃないかって?
えぇそうですが、どうしてもバッチファイルで手軽に済んだらいいなーって時があるんですよ!
再利用が楽だし。

テキストファイルの処理なんですが、応用としてはたとえば次のような事が出来ます。

使用例であらかじめオリジナルの「tp_GET_cmd.txt」をコピーして居ます。
これにはたとえばどっかから何かをGETしてくるFTPのコマンドが書いてあります。
ただし、ユーザIDだけは毎回変えたいので「ftp_GET_cmd.txt.tmp」を作成します。
そしてこのファイルの「userID」を「root」に置換してやるわけですね。

で、上には書いてありませんが、FTPで-fオプションで「ftp_GET_cmd.txt.tmp」を指定して自動で取ってこさせる。
終わったら「ftp_GET_cmd.txt.tmp」を削除し次ぎのユーザIDで同じ事をすると、、、いうような使い方が出来たりねと。