タイムスタンプで遊ぼう

ふとWindowsでtouchコマンドないかな?と調べていたら、PowerShellでファイルのプロパティ書き換えができることがわかりました。

ファイル作成時刻の書き換えかた

参考にしたサイトはWindows、ファイルのタイムスタンプ(作成日時、更新日時)を変更する|マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~

こちらのコードそのままにスクリプトを書きました。

Param([String] $file, [String] $date)
if (($file -eq "") -or ($date -eq "")) {
  write-host "Usage: touch filename 'yyyy/MM/dd HH:mm:ss'"
} else {
  $item=Get-Item -LiteralPath $file
  $item.CreationTime = Get-Date $date
  $item.LastWriteTime = Get-Date $date
}

これを$profileにエイリアスでtouchと名付けて保存しておきます。パラメータフォーマットを忘れないように、パラメータなしで起動するとヘルプを表示するようにしました。

エクスプローラは未来の時刻を表示しない

で、1900年代やら9999年代やらにタイムスタンプを書き換えて遊んでいたら、ファイル作成日を未来にした際、Windows7のエクスプローラでは表示されない時刻があることに気づきました。Σ( ̄。 ̄ノ)ノ

エクスプローラーでタイムスタンプが表示されない
(*'-') temp >> touch test.1 '2108/1/1 8:59:58'
(*'-') temp >> touch test.2 '2108/1/1 8:59:59'
(*'-') temp >> gci
 
 
    ディレクトリ: C:\temp
 
 
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2108/01/01      8:59          0 test.1
-a---        2108/01/01      8:59          0 test.2

あと100年もしないうちにWindows7のエクスプローラでタイムスタンプ表示に不具合が発生してしまう!

エクスプローラーでタイムスタンプが表示されないファイルのプロパティ

時刻が午前9時なのはUTC+0900だからでしょう。協定世界時では2107年12月31日の23時59分58秒までしか対応していないということ。

59秒じゃなくて58秒なのは、古きMS-DOS時代からの制約を引きずっているのだろうな。。。

※FATファイルシステムの修正時タイムスタンプ精度が2秒単位

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments