<環境>
windows2003
<目的>
大目的:ZabbixAgentインストールのバッチを作成している
小目的(今回の質問):コマンドプロンプトでバッチを作成しており、その中で指定のテキスト内の一部の文字列を変更しなければならない。以下のコマンドで試みているがうまくいかないため、アドバイスが欲しいです。
<コマンド>
@echo off
setlocal
pushd "%~dp0"
rem 設定
set IP=<ZabbixサーバのIPアドレス>
set log_path=zabbix_agentd.log
set hostname=%COMPUTERNAME%
rem ファイル設定
set file=Zabbix Agent
set exe=zabbix_agentd.exe
set conf=zabbix_agentd.conf
rem フォルダ設定
set folder=C:<ファイル名>
rem 以下の「for」ループ内で変数を変化させるための宣言
setlocal enabledelayedexpansion
rem confファイル置換
for /f "delims=" %%a in (<confファイルフルパス>) do (
set line=%%a
set line=!line:(LogFile=c:%log_path%)=(LogFile=c:%folder%%file%%log_path%)!
set line=!line:(Server=127.0.0.1)=(Server=%IP%)!
set line=!line:(ServerActive=127.0.0.1)=(ServerActive=%IP%)!
set line=!line:(Hostname=Windows host)=(Hostname=%hostname%)!
echo !line! >> <confファイルフルパス>
)
popd
pause
<参考にしたサイト>
https://jj-blues.com/cms/wantto-replacestring/
情報が足りないようでしたら追加致しますので指摘してください。
以上、よろしくお願い致します。
#8/23追記
以下のように改善されましたが、まだ未解決です。
仕様としては、batと同じディレクトリにコピーしそこで文字列置換を行った後対象のファイルに上書きする方法にしました。
置換前と置換後のコマンドは問題なく機能しますので、置換するコマンドのみ書かせていただきます。
【コマンド】
@echo off &setlocal
set a=Hostname=Windows host
echo %a%
set b=Hostname=%COMPUTERNAME%
echo %b%
set c=<編集対象ファイルのフルパス>
setlocal enabledelayedexpansion
for /f "usebackq" %%i in ("<置換するためのファイルのフルパス>") do (
set line=%%i
set line=!line:"%a%"="%b%"!
echo !line!>> "%c%"
)
endlocal
pause
【実行前ファイル内容】
a
aaaHostname=Windows hostaaa
a
【実行後ファイル内容】
a
aaaHostname=Windows
a
【試行内容】
set line=!line:"%a%"="%b%"! →だめだった
set line=!line:%a%=%b%! →だめだった
set line=!line:{%a%}={%b%}! →だめだった
set "line=!line:%a%=%b%!" →だめだった
適切に置換できるコマンドを知っている方がいれば、教えてください。
以上、よろしくお願い致します。
#8/26追記
下記のコマンドを実施しましたが、解決しませんでした……。
@echo off
set word1=Hostname=Windows host
set word2=Hostname=%COMPUTERNAME%
set text1=<置換前ファイル>
set text2=<置換後ファイル>
setlocal enabledelayedexpansion
for /f "usebackq" %%i in ("%text1%") do (
echo "%%i" | findstr "%word1%" >NUL && set line=%word2%
echo !line!>> "%text2%"
)
endlocal
pause
【置換前ファイルの内容】
a
a
a
Hostname=Windows host
a
a
a
【置換後ファイルの内容】
ECHO は <OFF> です。
ECHO は <OFF> です。
ECHO は <OFF> です。
Hostname=<ホスト名>
Hostname=<ホスト名>
Hostname=<ホスト名>
Hostname=<ホスト名>
以上、何か思い当たる節があるならば教えていただけたら幸いです。
回答2件
あなたの回答
tips
プレビュー