バッチファイルに日付・時間の文字列を作ってもらう


Y子です。
新年度の最初の週、お疲れさまでした。(2日間だけでしたが)

日付や時間の文字列を作る処理をメモしておきます。
今の時間が「2021/4/2 9:46:17」なら、「20210402」と「094617」という文字列を作るのが目的です。
想定する用途は、バッチファイルでファイルを出力する際に、「ファイル名に日時を付ける」ような場合です。

datetime.bat
@echo off

rem 日付(1)「2021/04/02」形式
echo %date%

rem 日付(2)「20210402」形式
set str_date=%date%
set str_date=%str_date:~0,4%%str_date:~5,2%%str_date:~8%
echo %str_date%

rem 日付(3)「20210402」形式
set str_date=%date:~0,4%%date:~5,2%%date:~8%
echo %str_date%

rem 日付(4)「20210402」形式
set str_date=%date:/=%
echo %str_date%

rem 時刻(1)「 9:46:17.92」形式
echo %time%

rem 時刻(2)「094617」形式
set str_time=%time: =0%
set str_time=%str_time:~0,2%%str_time:~3,2%%str_time:~6,2%
echo %str_time%

rem 時刻(3)「094617」形式
set str_time=%time: =0%
set str_time=%str_time:~0,8%
set str_time=%str_time::=%
echo %str_time%

少し解説もしておきます。
日付(1)は、参考のために、dateコマンドを直接出力しています。
日付(2)は、dateコマンドの結果を変数に格納した後、「/」を避けて4文字2文字2文字を抜き出し結合しています。
日付(3)は、(2)と同じことを、変数に格納することなく、dateコマンドの出力に対して直接行っています。
日付(4)は別手段で、dateコマンドの結果から「/」を削除することで、目的を達成しています。

時刻(1)は、参考のために、timeコマンドを直接出力しています。
時刻(2)は、timeコマンドの結果から「 」(半角スペース)を「0」に置換し、その後2文字2文字2文字を抜き出し結合しています。
時刻(3)は、半角スペースを「0」に置換後、最初の8文字を抜き出すことで秒の小数点以下を削り、最後に「:」を削除しています。

個人的に好きなのは、コードが少ない日付(4)と時刻(2)ですが、同じバッチファイルに同居させると別のやり方が混在してしまうので、美しくない気がします。悩ましいです。

サンプルコードを初めて載せてみました。タグはこんな感じで良いのでしょうか??
お役に立てたら幸いです。