前回から、Windowsのファイルのタイムスタンプについて学習していますが、
各タイムスタンプを確認するのに、dir /tc、dir /ta、dir /twを毎回入力するのが手間なので、PowerShellでコマンドを作っておきます。
(本記事はPowerShell入門記事としてコチラにもまとめています。)
タイムスタンプは、オブジェクト(ファイル)が持っているプロパティで確認できます。
作成日時なら、CreationTime
最終アクセス日時なら、LastAccessTime
最終更新日時なら、LastWriteTime
を、以下のように表示させて値を見ることができます。
C:\Users\takk\tmp>echo HELLO > bb.txt C:\Users\takk\tmp>powershell "(gp bb.txt).lastwritetime" 2018年6月16日 14:24:44 C:\Users\takk\tmp>
上記の時間は、dir /twと一致するでしょうか。
C:\Users\takk\tmp>dir /tw ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は B402-CA61 です C:\Users\takk\tmp のディレクトリ 2018/06/16 14:24 <DIR> . 2018/06/16 14:24 <DIR> .. 2018/06/16 14:24 8 bb.txt 1 個のファイル 8 バイト 2 個のディレクトリ 136,361,189,376 バイトの空き領域 C:\Users\takk\tmp>
同じ時間になりました。問題ないですね。
さて、各タイムスタンプをまとめて表示するための関数を作りましょう。
毎回powershellコマンドを実行するのも面倒なので、PowerShellに入ります。
C:\Users\takk\tmp>powershell Windows PowerShell Copyright (C) 2014 Microsoft Corporation. All rights reserved. PS C:\Users\takk\tmp>
各タイムスタンプを並べて表示する関数。
function stat($f){ (gp $f).creationtime (gp $f).lastaccesstime (gp $f).lastwritetime }
上をPowerShellのコンソールに貼り付けると、関数が定義されます。
実行すると、
PS C:\Users\takk\tmp> function stat($f){ >> (gp $f).creationtime >> (gp $f).lastaccesstime >> (gp $f).lastwritetime >> } >> PS C:\Users\takk\tmp> stat bb.txt 2018年6月16日 14:24:44 2018年6月16日 14:24:44 2018年6月16日 14:24:44 PS C:\Users\takk\tmp>
各タイムスタンプが表示されました。
見出しがないので、どの日時が何の日時なのか分かりにくいですね。
見出しをつけます。
function stat($f){ "作成 {0}" -f (gp $f).creationtime "最終アクセス {0}" -f (gp $f).lastaccesstime "最終更新 {0}" -f (gp $f).lastwritetime }
PS C:\Users\takk\tmp> function stat($f){ >> "作成 {0}" -f (gp $f).creationtime >> "最終アクセス {0}" -f (gp $f).lastaccesstime >> "最終更新 {0}" -f (gp $f).lastwritetime >> } >> PS C:\Users\takk\tmp> stat bb.txt 作成 2018/06/16 14:24:44 最終アクセス 2018/06/16 14:24:44 最終更新 2018/06/16 14:24:44 PS C:\Users\takk\tmp>
分かりやすくなりました。
さてLinuxのstatコマンドは、このような表示でした。
takk@deb9:~/tmp$ stat a File: a Size: 13 Blocks: 8 IO Block: 4096 通常ファイル Device: 801h/2049d Inode: 546991 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-14 20:48:37.280000000 +0900 Modify: 2018-06-14 20:47:55.256000000 +0900 Change: 2018-06-14 20:47:55.256000000 +0900 Birth: - takk@deb9:~/tmp$
今回作るstatもどきも、タイムスタンプだけでは寂しいので、ファイル名と、サイズぐらいは表示するように修正します。
ここで、オブジェクト(ファイル)に、どのようなプロパティが存在するか確認してみます。
get-memberで、各メンバが表示できますが、このうちのMemberTypeがPropertyとなっている項目がプロパティです。
PS C:\Users\takk\tmp> gp bb.txt | get-member TypeName: System.IO.FileInfo Name MemberType Definition ---- ---------- ---------- Mode CodeProperty System.String Mode{get=Mode;} AppendText Method System.IO.StreamWriter AppendText() CopyTo Method System.IO.FileInfo CopyTo(string de... Create Method System.IO.FileStream Create() CreateObjRef Method System.Runtime.Remoting.ObjRef Crea... CreateText Method System.IO.StreamWriter CreateText() Decrypt Method void Decrypt() Delete Method void Delete() Encrypt Method void Encrypt() Equals Method bool Equals(System.Object obj) GetAccessControl Method System.Security.AccessControl.FileS... GetHashCode Method int GetHashCode() GetLifetimeService Method System.Object GetLifetimeService() GetObjectData Method void GetObjectData(System.Runtime.S... GetType Method type GetType() InitializeLifetimeService Method System.Object InitializeLifetimeSer... MoveTo Method void MoveTo(string destFileName) Open Method System.IO.FileStream Open(System.IO... OpenRead Method System.IO.FileStream OpenRead() OpenText Method System.IO.StreamReader OpenText() OpenWrite Method System.IO.FileStream OpenWrite() Refresh Method void Refresh() Replace Method System.IO.FileInfo Replace(string d... SetAccessControl Method void SetAccessControl(System.Securi... ToString Method string ToString() PSChildName NoteProperty System.String PSChildName=aa.txt PSDrive NoteProperty System.Management.Automation.PSDriv... PSParentPath NoteProperty System.String PSParentPath=Microsof... PSPath NoteProperty System.String PSPath=Microsoft.Powe... PSProvider NoteProperty System.Management.Automation.Provid... Attributes Property System.IO.FileAttributes Attributes... CreationTime Property datetime CreationTime {get;set;} CreationTimeUtc Property datetime CreationTimeUtc {get;set;} Directory Property System.IO.DirectoryInfo Directory {... DirectoryName Property string DirectoryName {get;} Exists Property bool Exists {get;} Extension Property string Extension {get;} FullName Property string FullName {get;} IsReadOnly Property bool IsReadOnly {get;set;} LastAccessTime Property datetime LastAccessTime {get;set;} LastAccessTimeUtc Property datetime LastAccessTimeUtc {get;set;} LastWriteTime Property datetime LastWriteTime {get;set;} LastWriteTimeUtc Property datetime LastWriteTimeUtc {get;set;} Length Property long Length {get;} Name Property string Name {get;} BaseName ScriptProperty System.Object BaseName {get=if ($th... VersionInfo ScriptProperty System.Object VersionInfo {get=[Sys... PS C:\Users\takk\tmp>
さきほどのLastAccessTime等もありますね。
statもどきに追加したいのは、ファイル名と、サイズなので、該当するプロパティが、
Name、Lengthになります。
では、関数を作ります。
function stat($f){ "ファイル名 {0}" -f (gp $f).name "サイズ {0}" -f (gp $f).length "作成 {0}" -f (gp $f).creationtime "最終アクセス {0}" -f (gp $f).lastaccesstime "最終更新 {0}" -f (gp $f).lastwritetime }
貼り付けて、実行してみましょう。
PS C:\Users\takk\tmp> function stat($f){ >> "ファイル名 {0}" -f (gp $f).name >> "サイズ {0}" -f (gp $f).length >> "作成 {0}" -f (gp $f).creationtime >> "最終アクセス {0}" -f (gp $f).lastaccesstime >> "最終更新 {0}" -f (gp $f).lastwritetime >> } >> PS C:\Users\takk\tmp> PS C:\Users\takk\tmp> stat bb.txt ファイル名 bb.txt サイズ 8 作成 2018/06/16 14:24:44 最終アクセス 2018/06/16 14:24:44 最終更新 2018/06/16 14:24:44 PS C:\Users\takk\tmp>
完成です。
コメント