Symfoware

Symfowareについての考察blog

遅延環境変数の展開を行わずforループ内で変数を参照する

Windowsバッチファイルでforループ中に変数を参照する場合は、
遅延環境変数の展開を有効化してやる必要があります。

コマンドプロンプトでテキストファイルを読み込み、文字を置換する


たまたま見かけたバッチファイルで、遅延環境変数の展開を行わなくてすむ
テクニックがありました。

サブルーチン呼び出しです。


@echo off

rem 値を初期化
set VALUE=

rem ループでサブルーチンを呼び出し
for %%I in (A B C) do call :forcall %%I

goto :sub

rem サブルーチンの中では、普通に値が触れる
:forcall
echo ループ中の値:%*
set VALUE=%VALUE%%*
goto :eof

:sub
echo ループ終了後、VALUEの値:%VALUE%

pause





ミソはforからサブルーチンを引数つきで呼び出し、
サブルーチンの中で環境変数に値を設定するところ。

これを実行すると・・・


>test.bat
ループ中の値:A
ループ中の値:B
ループ中の値:C
ループ終了後、VALUEの値:ABC



ちゃんと狙い通りの処理になっています。




以前行った文字列置換を書き換えてみます。


@echo off

rem sample.txtを読み込んで処理する
for /f "delims=, tokens=1-3" %%I in (sample.txt) do (
    call :forcall %%I %%J %%K
)

goto :eof

rem サブルーチンの中では、普通に値が触れる
:forcall
set kind1=%1
set kind2=%3
set kind3=%3
echo %kind1:"='%,%kind2:"='%,%kind3:"='%
goto :eof





これで「!」が空白に置換されなくなりました。
だだし、今度は「%」が空白で置換されてしまいます。

バッチだとここが限界?
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/12/23(火) 09:10:47|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Python 簡易アプリケーションサーバーを作る(BaseHTTPServer) | ホーム | nginx拡張モジュール リクエストヘッダー情報を取得する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1572-aed7257f
この記事にトラックバックする(FC2ブログユーザー)