2007年11月21日水曜日

コマンドプロンプトで文字列を置換する

(2009/06/13 追記: コメント欄に、とても簡単に置換する方法を教えてもらったので、まずそちらを参考にすることをお薦めします。)


Widnowsのコマンドプロンプトで文字列の置換をする方法。
コマンドとしては提供されていないので、for文を利用する。

例えばシステム日付(例:2007/11/21)のスラッシュをハイフンにする場合。

@echo off
rem 変換したい文字列をセット

set before=%date%
rem 置換する文字をセット
set search=/
rem 置換後の文字をセット
set replace=-

rem 変数初期化
set after=
set replace_wk=

:loop
if "%before%" == "" goto :end
for /f "tokens=1* delims=%search%" %%A in ("%before%") do (
  set after=%after%%replace_wk%%%A
  set before=%%B
  set replace_wk=%replace%
)
goto :loop

:end
rem 変換結果の確認
echo %after%


対象文字列が日付だけなら、もっとシンプルにできる。
for /f "tokens=1-3 delims=/" %%A in ("%date%") do set today=%%A-%%B-%%C
echo %today%


()の中で変数を使う場合、遅延展開が絡んでくるので注意。(参考:setコマンドの遅延展開について (DOSプロンプト活用相談室LOG)


参考: コマンドプロンプトを使ってみよう! -バッチファイル-

4 件のコメント:

匿名 さんのコメント...

echo %date:/=-%でできますよ

floatingdays さんのコメント...

おお、本当だ。
ありがとうございます。

こんなに簡単にできたんですね。

匿名 さんのコメント...

「環境変数の部分文字列の抽出と置換」が参考になります。
http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

あと、この辺も知っていると便利です。
「バッチファイルの制御用コマンド」
http://www.fpcu.jp/dosvcmd/batch.htm

ご参考になれば。

admin さんのコメント...

ありがとうございます!

ブログ アーカイブ

tags