Chapter 11

ファイルのタイムスタンプの取得

zetamatta
zetamatta
2020.10.19に更新

いろんな方法があります。なお、日付表現については地域設定によって変わる可能性があるので、海外で用いられる可能性がある場合はその地域で期待どおり出力されている確認した方がよいでしょう。

for文(分までしか出ないが、お手軽で早い)

$ type f.cmd
@echo off
for %%I in (readme.md) do set "STAMP=%%~tI"
echo %STAMP%
$ f
2018/09/13 22:35

forfilesコマンド(秒まで出る)

$ type m.cmd
@echo off
for /F %%I in ('forfiles /P "%~dp1." /M "%~nx1" /C "cmd.exe /c echo @fdate-@ftime"') do set "STAMP=%%I"
echo %STAMP%
$ m readme.md
2018/09/13-22:35:40

0時~9時までは、時部分が一桁になる問題があるため、本ページ末のような対策が必要

whereコマンド(こちらも秒まで出る)

$ type x.cmd
@echo off
for /F "tokens=2,3" %%I in ('where /R . /T "%1"') do set STAMP=%%I-%%J
echo %STAMP%
$ x readme.md
2018/09/13-22:35:40

0時~9時までは、時部分が一桁になる問題があるため、本ページ末のような対策が必要

0~9時のタイムスタンプに対する対策

where でも forfiles でも時間部分が一桁の場合、タイムスタンプの比較が不具合を起こします。やむをえないので正規表現で判別するというベタな方法で対応します。

for /F "tokens=2,3" %%I in ('where /R . /T "%~1"') do set STAMP=%%I_%%J
echo %STAMP% | findstr _[0-9]: > nul && set STAMP=%STAMP:_=_0%