プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Windows、ファイルのタイムスタンプ(作成日時、更新日時)を変更する
■2015年12月29日追記
 速攻で改訂しました。ごめんなさい。
 本記事の内容も間違ってはいないので残しておきますが、
 できれば以下の記事も併せてご覧くださいm(__)m

 Windows、ファイルのタイムスタンプ(作成日時、更新日時)を変更する2(前の記事の改訂版)

結論から書くと、コマンドプロンプト(バッチファイル)だけで任意の値を設定するのは無理そうです。
Windows PowerShellを使うのが楽だと思います。

私は、こんな感じでやりましたφ(--)

■作成日時変更
powershell -Command $item = Get-Item -LiteralPath C:\hoge.txt;$item.CreationTime = Get-Date '2015/12/29 01:23:45'

■更新日時変更
powershell -Command $item = Get-Item -LiteralPath C:\hoge.txt;$item.LastWriteTime = Get-Date '2015/12/29 01:23:45'

「C:\hoge.txt」が対象のファイルです。
「2015/12/29 01:23:45」が設定したいタイムスタンプの値です。
「CreationTime」を指定すると作成日時、「LastWriteTime」を指定すると更新日時を更新します。
対象のファイルと設定したいタイムスタンプの値を書き換えて、
そのままコマンドプロンプトに貼り付ければ動くはずです。
※Windows 7 64bit環境でしか動作確認していませんが、
 多分、大丈夫だと……思いますけど、ダメだったらごめんなさい(^^:


それでは、詳細を書いていきます。

ちょっくらWindows上のファイルのタイムスタンプを任意の値に書き換える必要が出てきてですね。
Linuxだったら「touch」コマンドで一発だけど、
Windowsだとどうやるの(--?というのが今回のきっかけです。

コンピュータ自体の日時設定を一旦変更してファイルを保存し直せばできるけど、
そんなん面倒くさくってやってられないですからね(-A-)

コマンド一発でドカン!とやりたかったのです。

というわけで、あれやこれややった結果のコマンド一発でドカン!がこちらφ(--)

■作成日時変更
powershell -Command $item = Get-Item -LiteralPath C:\hoge.txt;$item.CreationTime = Get-Date '2015/12/29 01:23:45'

■更新日時変更
powershell -Command $item = Get-Item -LiteralPath C:\hoge.txt;$item.LastWriteTime = Get-Date '2015/12/29 01:23:45'

「C:\hoge.txt」が対象のファイルです。
「2015/12/29 01:23:45」が設定したいタイムスタンプの値です。
対象のファイルと設定したいタイムスタンプの値を書き換えて、
そのままコマンドプロンプトに貼り付ければ動くはずです。
何回も使うようであれば、対象ファイルと設定するタイムスタンプをパラメータで取るようにして
バッチファイルにした方が良いかもですね。

ちなみに私の環境(Windows 7 64bit)でしか動作確認はしていません。
その他の環境で動かなかったら、ごめんなさい。

これで話は終わりですが、せっかくなので中身の説明もしておきますね。
「見れば分かるよ!」な人は読み飛ばしてください。

まず、左側の

powershell -Command

は「Windows PowerShellで以降のコマンドを実行するから!」な指定です。
コマンドプロンプトではなくWindows PowerShellのコンソールから実行する場合は、
この指定は必要ありません。

次の

$item = Get-Item -LiteralPath C:\hoge.txt;$item.CreationTime = Get-Date '2015/12/29 01:23:45'



$item = Get-Item -LiteralPath C:\hoge.txt



$item.CreationTime = Get-Date '2015/12/29 01:23:45'

の2行分を「;」を使ってまとめて1行に書いただけです。

最初の

$item = Get-Item -LiteralPath C:\hoge.txt

は「C:\hoge.txt」つまり対象のファイルを「$item」に突っ込んでいます。

そして、次の

$item.CreationTime = Get-Date '2015/12/29 01:23:45'

で「$item」つまり対象のファイルの「CreationTime」に
「2015/12/29 01:23:45」を設定しています。

「CreationTime」は「作成日時」の指定ね。
これを「LastWriteTime」にすると「更新日時」の指定になります。

まとめると

powershell -Command $item = Get-Item -LiteralPath C:\hoge.txt;$item.CreationTime = Get-Date '2015/12/29 01:23:45'



[Windows PowerShellでコマンドを実行しやがれ] [「C:\hoge.txt」が「$item」ってことね];[「$item」の作成日時に'2015/12/29 01:23:45'を設定するよ]

です。

これでファイルのタイムスタンプを任意の値に変更できます。

■作成日時変更
powershell -Command $item = Get-Item -LiteralPath C:\hoge.txt;$item.CreationTime = Get-Date '2015/12/29 01:23:45'

■更新日時変更
powershell -Command $item = Get-Item -LiteralPath C:\hoge.txt;$item.LastWriteTime = Get-Date '2015/12/29 01:23:45'

そんな感じ\(--)/

■2015年12月29日追記
 速攻で改訂しました。ごめんなさい。
 本記事の内容も間違ってはいないので残しておきますが、
 できれば以下の記事も併せてご覧くださいm(__)m

 Windows、ファイルのタイムスタンプ(作成日時、更新日時)を変更する2(前の記事の改訂版)
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● Windows  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事