LastAccessTime更新されるされない切り替え

Windowsのファイルのタイムスタンプについて学習中です。

LastAccessTime。
ファイルを右クリックしてプロパティを表示すると、

「アクセス日時」というタイムスタンプが見つかりますが、dirコマンドのヘルプだと、最終アクセスと書かれていたり、Webだと最終アクセス日時だったり、最終アクセス時刻だったり、揺らぎがあって、どの言葉を使えばいいやら、ずっと迷っていましたが、分かればいいので気にしないことにしました。これからは、FileInfoのプロパティ名であるLastAccessTimeという名前を使うことにします。

さて、LastAccessTimeですが、typeコマンドでファイルの内容を閲覧しても、更新されませんでしたが、どうやら更新されるされないは、設定次第のようです。

fsutilコマンドで、LastAccessTimeがアクセス時に更新されない設定になっているかどうか確認できます。
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/fsutil-behavior

使い方は、とても簡単です。

fsutil コマンド ...

fsutilにコマンドを並べていくだけなのですが、次に指定できるコマンドに何があるかは、コマンドを指定しなければ、ヘルプ表示されます。

C:\Users\takk\tmp>fsutil
---- サポートされるコマンド ----

8dot3name       8dot3name 管理
behavior        ファイル システムの動作の制御
dirty           ボリュームの dirty ビットの管理
file            ファイルに固有のコマンド
fsinfo          ファイル システム情報
hardlink        ハードリンクの管理
objectid        オブジェクト ID の管理
quota           クォータの管理
repair          自己復旧の管理
reparsepoint    再解析ポイントの管理
resource        トランザクション リソース マネージャーの管理
sparse          スパース ファイルの制御
transaction     トランザクションの管理
usn             USN の管理
volume          ボリュームの管理
wim             透過的な wim ホスティングの管理

C:\Users\takk\tmp>

次のコマンドにbehaviorを指定します。

C:\Users\takk\tmp>fsutil behavior
---- サポートされている BEHAVIOR コマンド ----

query           ファイル システムの behavior パラメーターを照会
set             ファイル システムの behavior パラメーターを変更

C:\Users\takk\tmp>

さらに次のコマンドにqueryを指定します。

C:\Users\takk\tmp>fsutil behavior query
使用法 : fsutil behavior query <オプション>

<オプション>

AllowExtChar
BugcheckOnCorrupt
Disable8dot3 [<ボリューム パス>]
DisableCompression
DisableCompressionLimit
DisableDeleteNotify
DisableEncryption
DisableLastAccess
DisableSpotCorruptionHandling
EncryptPagingFile
MemoryUsage
MftZone
QuotaNotify
SymlinkEvaluation

詳細については、"fsutil 8dot3name query /?"を使用してください。

C:\Users\takk\tmp>

最後にDisableLastAccessを指定します。これでLastAccessTimeが更新される設定になっているか確認できます。

C:\Users\takk\tmp>fsutil behavior query disablelastaccess
DisableLastAccess = 1

C:\Users\takk\tmp>

DisableLastAccess = 1の場合、LastAccessTimeは更新される設定になってません。

0を設定してみます。設定は、queryの代わりにsetを使います。

C:\Users\takk\tmp>fsutil behavior set disablelastaccess 0
エラー:  アクセスが拒否されました。

エラーになりました。管理者権限がないと変更できないようです。プロンプト起動時に右クリックメニューで出てくる「管理者として実行」を選んで実行し、コマンドを入力します。

元のプロンプトで、値が変更されていることが確認できます。

C:\Users\takk\tmp>fsutil behavior query disablelastaccess
DisableLastAccess = 0

C:\Users\takk\tmp>

では、LastAccessTimeがtypeコマンドの閲覧後に更新されるか確認してみます。
前回作ったstatコマンドを使いたいので、PowerShell上で実行します。

PS C:\Users\takk\tmp> echo HELLO > abc.txt
PS C:\Users\takk\tmp> stat abc.txt
ファイル名   abc.txt
サイズ       16
作成         2018/06/17 12:04:50
最終アクセス 2018/06/17 12:04:50
最終更新     2018/06/17 12:04:50
PS C:\Users\takk\tmp> type abc.txt
HELLO
PS C:\Users\takk\tmp> stat abc.txt
ファイル名   abc.txt
サイズ       16
作成         2018/06/17 12:04:50
最終アクセス 2018/06/17 12:05:11
最終更新     2018/06/17 12:04:50
PS C:\Users\takk\tmp>

確認して満足できたので、設定は戻しておくことにしました。