†DOSとバッチとスクリプト†

文字列の置換・削除・切り出し

作成開始日 2017.09.12
最終更新日

基本構文

操作構文用例用例の説明
@置換%st:before=after%echo %st:I=We%「I」を「We」に変換する
A削除%st:delstr=%echo %st: =%スペースを削除する
B切り出し%st:~start,chars%echo %st:5,3%6文字目から3文字切り出す
%st:~start%echo %st:~3%4文字目から末尾まで切り出す
%st:~-chars%echo %st:~-2%末尾から2文字切り出す

Aの削除は@の置換の応用(ブランクへの置換)
Bの切り出しの開始点は先頭が0、文字目とは1ずれるので注意

サンプル:バッチで作成するファイルの名前に自動的に日付を付加する

例えば、2017年9月12日に作成したファイルは「myfile20170912.mp3」と言った感じにしたい。が、DATE命令で取得できる日付データは「2017/09/12」形式で「/」を含んでしまう。ファイル名には「/」を使用できないので;

「/」を「_」や「-」に置換して、「2017_09_12」や「2017-09-12」とするか、
「/」を削除して「20170912」という形式にしたい。
西暦を下二桁だけにして「17-09-12」や「170912」の形式にできれば尚便利。

と言うことで、バッチ内での文字列の操作が必要になる。具体的に次のようになる;

SET DT=%DATE%		日付の取得、「2017/09/12」の形式で出力されるが「/」は厄介
SET NEWDT=%DT:/=_%	NEWDTは「2017_09_12」の形式となる
SET NEWDT=%DT:/=%	こちらは「20170912」形式となる

日付取得と置換処理を1行にまとめることもできる。

SET DT=%DATE:/=-%	DTは「2017-09-12」形式となる
さらに「年」を二桁にする場合には、切り出し処理を行う;

SET DT=%DATE%		日付情報の取得(「yyyy/mm/dd」形式)
SET DT1=%DATE:/=-%	「yyyy-mm-dd」形式に変換
SET DT2=%DT1:~2,8%	「yy-mm-dd」形式に変換

SET DT=%DATE%		日付情報の取得(「yyyy/mm/dd」形式)
SET DT1=%DATE:/=%	「yyyymmdd」形式に変換
SET DT2=%DT1:~2,6%	「yymmdd」形式に変換

【参考】DATA関数の日付文字列は、for文でdelimsを「/」に指定すれば奇麗に分解することができる。単にファイル名の付け替えだけなら上記のような方法でもよいが、日付計算などをする場合には、for文で分解する方が便利だろう。
for /f "tokens=1-3,delims=/" %%a in ("%DATE%")do (
set yyyy=%%a
set mm=%%b
set dd=%%c
)



【DOSとバッチ目次】 【ホーム】