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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

1回答

1657閲覧

[windowsバッチ] ループで条件によって変数の中身を変え、その変数を利用し文字変換を行いファイル出力をすることについて

mdke

総合スコア2

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2021/04/09 08:18

Windowsバッチ ファイル出力について

Windowsバッチでテキストファイルから読み込んだデータの文字を一部変更して、ファイル出力を行うプログラムを作成しています。
for分の中で、変数の中身を更新した後にファイル出力を行うのですが
「echo !line:!before_string!=!after_string!!>>!OUT_Flag!」
以上の書き方で文字変換をした後にファイル出力ができなくて困っています。
「echo !line:%before_string%=%after_string%!>>!OUT_Flag!」
だと、変数の中身が更新される前の状態の値を参照してしまいます。

ソースコードを張るので、アドバイスをいただきたいです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

windowsバッチ
echo off
rem 処理ステータスをゼロセット
set status=0
set end_status=0

rem ファイル情報をセット
set IN_FILE[0]=a.TXT
set IN_FILE[1]=b.TXT
set OUT_FILE[0]=OUTFILE.TXT
set OUT_FILE[1]=OUTFILE1.TXT

set f_String = 文字取得
set before_string=51
set after_string=21

set b_dammyString=ダミー
set a_dammyString=ダミー

setlocal enabledelayedexpansion

set I=0

set Flag=!IN_FILE[%I%]!
set OUT_Flag=!OUT_FILE[%I%]!

rem IN_FILEの数繰り返し処理を行う
if defined Flag (
call echo !Flag!
rem IN_FILEの1行目を読み込んで文字変換をしファイル出力を行う
for /f "delims=" %%a in (!Flag!) do (
set line=%%a
if %I%==0 (
set f_String=!line:~20,2!
)

if !f_String!==1 ( set before_string=1 set after_string=33 ) else if !f_String!==2 ( set before_string=2 set after_string=22 ) else if !f_String!==3 ( set before_string=3 set after_string=23 ) else if !f_String!==4 ( set before_string=4 set after_string=24 ) echo !line:!before_string!=!after_string!!>>!OUT_Flag! echo !before_string! echo !after_string! echo !OUT_Flag! GOTO :END

)
)

:END
pause
SET STATUS=%END_STATUS%
exit %STATUS%

試したこと

echo !line:!before_string!=!after_string!!>>!OUT_Flag!
上記について、!!の位置を変えたり増やしたりしました。
その結果は、出力したファイルに「line:before_string after_string」と記載される状態です。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

echo !line:!before_string!=!after_string!!>>!OUT_Flag!
を、
call :echoline
に変えて、末尾に下記を追加。

CMD

1:echoline 2echo !line:%before_string%=%after_string%!>>!OUT_Flag! 3exit /b

ところで、完成していないようですが、作成途中ですかね。

投稿2021/04/09 13:44

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mdke

2021/04/12 00:14

回答ありがとうございます。 作成中に困ってしまった為に質問させて頂きました。 無事、やりたいことが出来ました。 ベストアンサーとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問