如果Powershell命令分隔符为; (分号),为什么“约会;dir”使dir输出额外的详细信息?


11

我知道分号是Powershell中的命令分隔符。 echo "hello"; dir提供此输出。

PS C:\> echo "hello"; dir
hello

Directory: C:\

Mode         LastWriteTime     Length Name
----         -------------     ------ ----
d-----       2018-04-29 13:02         BCD_Backup
d-----       2018-12-02 14:08         Dell
<snip>

但是为什么要date; dir给出这个输出呢?

PS C:\> date; dir

Friday, December 14, 2018 11:14:23

PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\BCD_Backup
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\
PSChildName       : BCD_Backup
PSDrive           : C
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : True
Name              : BCD_Backup
FullName          : C:\BCD_Backup
Parent            :
Exists            : True
Root              : C:\
Extension         :
CreationTime      : 2018-04-29 13:02:31
CreationTimeUtc   : 2018-04-29 11:02:31
LastAccessTime    : 2018-04-29 13:02:31
LastAccessTimeUtc : 2018-04-29 11:02:31
LastWriteTime     : 2018-04-29 13:02:31
LastWriteTimeUtc  : 2018-04-29 11:02:31
Attributes        : Directory
Mode              : d-----
BaseName          : BCD_Backup
Target            : {}
LinkType          :


PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\Dell
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\
<snip>

有趣的问题。我希望它能得到解答,因为我自己也不知道,而且我知道如何使用Powershell。
LPChip


1
我认为此BUG是PowerShell 功能推迟/推迟输出以免在连续命令中插入相同标头的结果,并且似乎存在了很长时间。
LotPings

@LotPings-令人着迷的是,Get-ChildItem似乎没有任何选项可以生成大于日期的输出;GET-ChildItem结果英寸
迈克尔Teter

同意,我也很好奇执行的内容date。它既不是别名,也不是cmdlet或.exe文件(PSv6 BTW中的同一问题)
LotPings

Answers:


2

我认为,当powershell逐个执行语句时,它将第一个语句的输出格式应用于所有后续语句。

Get-Date返回一个DateTime类型的对象时,它将被格式化为列表,从而影响您的“ dir”输出。

您可以Get-Date使用'format'选项通过将返回类型的返回值更改为字符串来测试此假设:

date -Format yyyy-MM-dd ; dir

(这将为'dir'产生默认输出)

或者通过将默认输出格式通过管道传递到Format-Table以下方式来更改:

 date | Format-Table ; dir

0

这似乎仅在您使用日期时发生。包括其他PS cmdlet在内的“几乎所有其他内容”(仅尝试了一些)。

输入的“日期”似乎正在调用核心Windows(就像cmd.exe)来找回该日期字符串,PowerShell试图对它出现的字符串进行处理。

如果您将其反转,则“此处无任何内容”日期不会表现出这种怪异。只是这样做...

 dir;date


    Directory: D:\Scripts


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         9/1/2018   2:12 PM                .vscode
d-----         7/3/2018   4:44 PM                CheckURI

....


DisplayHint : DateTime
Date        : 12/14/2018 12:00:00 AM
Day         : 14
DayOfWeek   : Friday
DayOfYear   : 348
Hour        : 14
Kind        : Local
Millisecond : 516
Minute      : 42
Month       : 12
Second      : 22
Ticks       : 636803953425164049
TimeOfDay   : 14:42:22.5164049
Year        : 2018
DateTime    : Friday, December 14, 2018 2:42:22 PM
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.