在 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
患有:
- 没有秒了
- 日期时间宽度在 PC 或语言环境之间不一定是固定的。
同样 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
我正在尝试编写一个增强的目录实用程序(在 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
患有:
- 没有秒了
- 日期时间宽度在 PC 或语言环境之间不一定是固定的。
同样 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