質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

解決済

コマンドプロンプトでのテキスト内の文字列置換をしたい※windows2003

zazabi
zazabi

総合スコア24

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

2回答

0評価

0クリップ

8121閲覧

投稿2019/08/19 07:52

編集2019/08/26 04:54

<環境>
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=<ホスト名>

以上、何か思い当たる節があるならば教えていただけたら幸いです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

otn

2019/08/19 12:21

> うまくいかないため どうなるんでしょうか?
Zuishin

2019/08/20 05:09

なんでそんな古いサーバーでインストーラー作成してるんですか?
Zuishin

2019/08/23 06:14

なんでそんな古いサーバーでインストーラー作成してるんですか?

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。