自動でSVNにコミットするteraterm macroを作成したのですが、そのマクロのユーザ名とパスワードの初期設定をバッチでやってみたかったので作成しました。
まぁ、テキストエディタで開いて書き込めばいいだけなので、無駄なんですけどね。
コードはこんな感じです。
echo off
echo 初期設定を行います。
rem 初期化
set SVN_USR=
set SVN_PASSWD=
rem 入力要求
set /P SVN_USR="SVNのユーザ名: "
set /P SVN_PASSWD="SVNのパスワード: "
rem 入力値echo
echo ユーザ名は %SVN_USR% です
echo パスワードは %SVN_PASSWD% です
echo 問題がなければ、ファイル作成処理を開始します。よろしいですか?
choice
if errorlevel 2 goto :no
if errorlevel 1 goto :yes
:no
echo 実行を中止します。
echo 処理中止
pause
exit /b
:yes
if EXIST ..\macro\deploy.ttl del ..\macro\deploy.ttl
echo ファイルを作成します。
setlocal enabledelayedexpansion
for /f "delims=" %%A in (.conf\default_deploy.ttl) do (
set line0=%%A
set line1=!line0:_svnuser_=%SVN_USR%!
set line2=!line1:_svnpassword_=%SVN_PASSWD%!
echo !line2!>>..\macro\deploy.ttl
)
endlocal
pause
基本的には、よくある文字列の置き換えテンプレートとyesnoのメッセージによる分岐を組み合わせただけの処理です。
default.ttlというデフォルトのマクロを隠しフォルダ内に置き、
それを参照し、そのファイル内の「_svnuser_」「_svnpasswd_」を
入力された情報で置き換えるという処理です。
ただこれ、実は正しく動作していないです。笑
というのも、文字列内に「!」が含まれていた場合に、特殊文字と判断して消してしまうようで、エスケープしてもダメ。
他の方法を色々試してみましたが、バッチの限界を感じてしまいました。
どうしても、「!」マークの文字を使用した文字列の置き換えをしたい場合には、wshを使用すれば問題なく置き換えることができます。
また、バッチの中にwshを混ぜた書き方もできるので、次の記事で実際に書いたコードを載せようと思います。