หากตัวแยกคำสั่ง 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>

คำถามที่น่าสนใจ ฉันหวังว่ามันจะได้รับคำตอบเพราะฉันไม่รู้ว่าจะทำอะไร
LPChip


1
ฉันคิดว่าBUGนี้เป็นผลมาจากคุณสมบัติ PowerShells เพื่อเลื่อนออก / เลื่อนการส่งออกเพื่อไม่แทรกส่วนหัวเดียวกันสำหรับคำสั่งที่ต่อเนื่องและดูเหมือนว่าจะมีอยู่เป็นเวลานาน
LotPings

@LotPings - สิ่งที่น่าสนใจคือ Get-ChildItem ดูเหมือนจะไม่มีตัวเลือกใด ๆ ที่จะสร้างผลลัพธ์ที่> วันที่; รับ ChildItem ผลลัพธ์มา
Michael Teter

ตกลงฉันยังอยากรู้อยากเห็นสิ่งที่จะดำเนินการกับdateทุก ไม่ใช่ไฟล์ alias หรือไฟล์ cmdlet หรือ. exe (ปัญหาเดียวกันใน PSv6 BTW)
LotPings

คำตอบ:


2

ฉันคิดว่ามันใช้การจัดรูปแบบผลลัพธ์ของคำสั่งแรกกับคำสั่งที่ตามมาทั้งหมด

เมื่อGet-Dateส่งคืนออบเจ็กต์DateTimeประเภทจะได้รับการจัดรูปแบบเป็นรายการซึ่งส่งผลต่อผลลัพธ์ 'dir' ของคุณ

คุณสามารถทดสอบสมมติฐานนี้โดยเปลี่ยนประเภทผลตอบแทนGet-Dateเป็นสตริงโดยใช้ตัวเลือก 'format':

date -Format yyyy-MM-dd ; dir

(สิ่งนี้จะสร้างผลลัพธ์เริ่มต้นสำหรับ 'dir')

หรือโดยการเปลี่ยนการจัดรูปแบบเอาต์พุตเริ่มต้นโดยการวางแนวมันเป็นFormat-Table:

 date | Format-Table ; dir

0

ดูเหมือนว่าจะเกิดขึ้นเมื่อคุณใช้วันที่เท่านั้น 'แทบจะทุกอย่างอื่นหลังจากนั้น' รวมถึง PS cmdlets อื่น ๆ (ลองไม่กี่)

'date' ตามที่พิมพ์ดูเหมือนจะเรียกคอร์ Windows (เช่น cmd.exe) เพื่อดึงข้อมูลนั้นกลับมา PowerShell พยายามทำบางสิ่งกับสตริงที่ปรากฏ

หากคุณกลับรายการนี้ 'Anything here here' วันที่จะไม่แสดงความผิดปกตินี้ มันทำอย่างนี้ ...

 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.