在 powershell DIR 列表中强制使用日期格式

Forcing the date format in a powershell DIR listing

我正在尝试编写一个增强的目录实用程序(在 python 中),它 post 处理通过命令提示符 DIR 命令获得的许多目录列表。问题是我需要 YYYY-MM-DD HH:MM:SS.

的特定不可知格式的日期时间输出

DIR 给我:

27-Apr-17  06:18 p.m.                56 cq.bat
27-Apr-17  06:13 p.m.                27 cqr.bat
27-Apr-17  06:15 p.m.                69 cqu.bat
06-Jul-16  08:43 a.m.               164 cr.bat
15-Jun-16  12:35 p.m.                36 crb.bat
26-Mar-16  01:41 p.m.               102 cru.bat
25-May-16  04:11 p.m.                62 ct.bat
07-Mar-16  07:48 a.m.                71 ctr.bat

患有:

同样 powershell dir 给我:

-a----       27-Apr-17  6:13 p.m.             27 cqr.bat
-a----       27-Apr-17  6:15 p.m.             69 cqu.bat
-a----       06-Jul-16  8:43 a.m.            164 cr.bat
-a----      15-Jun-16  12:35 p.m.             36 crb.bat
-a----       26-Mar-16  2:41 p.m.            102 cru.bat
-a----       25-May-16  4:11 p.m.             62 ct.bat
-a----       07-Mar-16  8:48 a.m.             71 ctr.bat

我也有类似的问题,但我认为 powershell 在日期格式方面可能更灵活一些。

我不想 save/mess with/restore PC 的日期格式字符串。

期望的输出是:

2017-04-27 18:13:12             27 cqr.bat
2017-04-27 18:15:33             69 cqu.bat
2016-07-06  8:43:53            164 cr.bat
2016-06-15 12:35:22             36 crb.bat
2016-03-26 14:41:53            102 cru.bat
2016-05-25 16:11:44             62 ct.bat
2016-03-07  8:48:23             71 ctr.bat

您可以使用计算 属性 和 ToString() 方法

Get-ChildItem $somepath | Select-Object @{n='LastWriteTime';e={$_.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss")}},Length,Name

这将为您提供指定的 3 列。您还可以利用 natural line breaks 提高可读性。

Get-ChildItem $somepath |
    Select-Object @{n='LastWriteTime';e={$_.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss")}},
                  Length,
                  Name

如评论所述,日期格式为 Case-Sensitive(即 M 表示月,而 m 表示分钟)。

要使用 -f 格式运算符在此计算 属性,您需要设置一个模板字符串来格式化要插入其中的 属性。

尝试

Get-ChildItem 'ThePath' |
Select-Object @{n='LastWriteTime';e={'{0:yyyy-MM-dd HH:mm:ss}' -f $_.LastWriteTime}}, Length, Name