问题描述
我正在尝试编写一个增强的目录实用程序(使用python),该实用程序对通过命令提示符DIR
命令获得的许多目录列表进行后处理。问题是我需要使用YYYY-MM-DD HH:MM:SS
的特定不可知格式的datetime输出。
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在日期格式化部门可能会更加灵活。
我宁愿不必保存/恢复/恢复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")}},Name
,
如前所述,日期格式区分大小写(M
代表几个月,而m
代表分钟)。
要使用-f
Format运算符对此属性使用计算所得的属性,您需要设置模板字符串以格式化要插入其中的属性。
尝试
Get-ChildItem 'ThePath' |
Select-Object @{n='LastWriteTime';e={'{0:yyyy-MM-dd HH:mm:ss}' -f $_.LastWriteTime}},Name