CMD และพรอมต์คำสั่งใน windows แตกต่างกันอย่างไร


30

จนถึงตอนนี้ฉันไม่เคยคิด (และไม่เคยสังเกต) สิ่งนั้นcmdและcommandเป็นสองสิ่งที่แตกต่างกัน ดีที่พวกเขา?

ดูรูปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ที่จริงแล้วฉันมักจะเปิดcmdจากกล่องโต้ตอบเรียกใช้เมื่อใดก็ตามที่ฉันต้องการบรรทัดคำสั่ง (สำหรับ Git / VIM) ดังนั้นฉันจึงปรับแต่งตำแหน่งการแสดงผลแบบอักษรสี ฯลฯ วันนี้ฉันเปลี่ยนพิมพ์commandใน Run แทนcmdและพบว่ามีสิ่งใหม่ในหน้าต่างของฉัน มันมี "DOS" ในหน้าต่าง

ดังนั้นเห็นได้ชัดว่าควรจะมีความแตกต่างระหว่างและcmd commandผมอยากจะรู้ว่า

  1. ความแตกต่างระหว่างพวกเขา
  2. เหตุใด Microsoft จึงแยกพวกเขาออก (Unix & Linux มีเพียงหนึ่งเชลล์โดยค่าเริ่มต้นคือ Bash)

11
ฉันจะถือว่าcommand.comเป็นรุ่น 16 บิตแบบดั้งเดิม (ใช้ได้เฉพาะกับการติดตั้งแบบ 32 บิต) ไม่มีอยู่ใน Windows 7 รุ่น 64 บิตของฉัน
Der Hochstapler

11
UNIX และ Linux มีมากกว่าหนึ่งเชลล์ที่พร้อมใช้งาน โดยปกติแล้วเชลล์เริ่มต้นคือ Bash
ephsmith

@ ช่างตีเหล็กนั่นคือสิ่งที่ฉันพูด ..
Surya

โปรดทราบว่าวลี "พรอมต์คำสั่ง" ในทางเทคนิคสามารถใช้เพื่ออ้างถึง command.exe หรือ cmd.exe แต่ในทางปฏิบัติมักจะใช้เพื่อหมายถึง cmd.exe
แฮร์รี่จอห์นสตัน

Unix มีทั้งหมดสี่เชลล์เหล่านี้คือ csh, ksh, bash, zsh
Deb

คำตอบ:


31

TL; DR

เมื่อคุณเรียกใช้โปรแกรมคอนโซล 32 บิตก็จะดำเนินการโดยcmd; เมื่อคุณเรียกใช้โปรแกรมคอนโซล 16 commandบิตก็จะดำเนินการโดย

รายละเอียด

Windows XP มีระบบย่อยเพื่อรองรับแอปพลิเคชั่นแบบ 16 บิตที่เก่ากว่า

แอปพลิเคชัน 16 บิตเก่ามีให้บริการทั้งในโปรแกรม DOS และ Windows โปรแกรม DOS ตามลักษณะของมันคือแอปพลิเคชั่นคอนโซลและทำงานในรูปแบบที่พร้อมรับคำสั่ง อย่างไรก็ตามแอปพลิเคชั่นคอนโซลของ Windows แบบ 32 บิตนั้นคล้ายกันมากและดูเหมือนกัน

ตัวประมวลผลคำสั่ง / ล่ามcmdมีวัตถุประสงค์หลายประการ:

  • เพื่อรันโปรแกรมคอนโซลข้อความ Windows แบบ 32 บิต
  • การให้บริการและจัดการการทำงานบรรทัดคำสั่งต่าง ๆ ( dir, copyฯลฯ )
  • แปลและเรียกใช้ไฟล์แบตช์ ( .batไฟล์ที่เข้ากันได้กับ DOS และ.cmdไฟล์ที่รองรับ NT )

เมื่อคุณเรียกใช้โปรแกรมคอนโซล 16 บิตเก่าจะถูกดำเนินการโดย NTVDM (เครื่อง DOS เสมือน Windows NT) มันมีระบบ DOS จำลอง (ดังนั้นเครื่อง DOS เสมือน ) ซึ่งคล้ายกับการใช้งานซอฟต์แวร์เครื่องเสมือนโดยเฉพาะยกเว้นเลเยอร์การจำลองนั้นง่ายกว่า commandเป็นตัวแปลคำสั่งรุ่น 16 บิตที่ใกล้เคียงกับ DOS จริงมากกว่าcmd.exeโปรแกรม Windows (และมีส่วนหัว Windows PE command.comซึ่งแตกต่างจากที่มีส่วนหัว DOS MZ)

commandมีวัตถุประสงค์เดียวกันcmdยกเว้นว่ารองรับเฉพาะโปรแกรมแบบ 16 บิตเท่านั้น นอกจากนี้ยังไม่รองรับ.cmdไฟล์และมีคำสั่งในตัวน้อยกว่าและมีข้อ จำกัด ในไวยากรณ์มากกว่า ( cmdเป็นล่ามบรรทัดคำสั่งที่ใหม่กว่าทันสมัยกว่าและมีความทันสมัยกว่าคล้ายกับ4DOS )

อย่างไรก็ตามมันรองรับโปรแกรม DOS แบบกราฟิก (เช่นเกมเก่า) แต่ความสำเร็จของการรันขึ้นอยู่กับไดรเวอร์การ์ดแสดงผลและลักษณะของโปรแกรม มีเว็บไซต์จำนวนมากที่เสนอเคล็ดลับต่าง ๆเพื่อให้เกม DOS สามารถทำงานบน Windows ได้ (แม้ว่าความสำเร็จใน Vista และสูงกว่ามักจะ จำกัด กว่า XP)

ควรสังเกตว่า Windows รุ่น 64 บิตได้ลดการรองรับโปรแกรม 16 บิตอย่างสมบูรณ์และดังนั้นจึงไม่รวมcommandเลยดังนั้นโปรแกรม DOS และ Windows 16 บิตจะไม่ทำงานและจะแสดงข้อความข้อผิดพลาด (ทำให้เข้าใจผิด) แทน.


บันทึกทางเทคนิค

command.comมี.comส่วนขยายสำหรับความเข้ากันได้ย้อนหลังกับโปรแกรม DOS แต่เช่นเดียวกับคำสั่ง DOS ภายนอกรุ่นอื่น ๆ ของ Windows ส่วนใหญ่ภายในเป็น.exeไฟล์Windows PE นี้จะให้สังเกตที่น่าสนใจว่าในขณะที่ Windows ใช้นามสกุลเป็นตัวบ่งชี้ของวิธีการจัดการกับที่สุดไฟล์ประเภทหนึ่งสำหรับคนที่ปฏิบัติการจะละเว้นการขยายและดูที่เนื้อหาของมัน (มิฉะนั้น.exeจะไม่ทำงานถ้าถือว่าเป็น.com) คำถามนี้เกี่ยวข้องกับผลกระทบนี้


ในขณะที่คุณสามารถเรียกใช้โปรแกรมคอนโซลแบบ 32 บิตได้จาก cmd.exe แต่คุณไม่จำเป็นต้องทำ ถ้าคุณคลิกสองครั้งที่แฟ้มที่ปฏิบัติการในโหมดคอนโซลไฟล์นั้นจะไม่ทำงาน "ภายใน" cmd.exe ในทำนองเดียวกัน command.exe ไม่ใช่สิ่งเดียวกับ NTVDM
แฮร์รี่จอห์นสตัน

1
ฉันเกลียดการเริ่มประโยคด้วยคำสั่งชื่อ
Synetech

> command.exe ไม่ใช่สิ่งเดียวกับ NTVDM No แต่เป็นส่วนหนึ่งของมันพร้อมกับ DLLs หลายตัว (ฉันได้เรียนรู้วิธีนี้อย่างหนักขณะที่พยายามรับแอพคอนโซล 16 บิตเพื่อทำงานบนระบบ XP )
Synetech

"โปรแกรม DOS ตามลักษณะของมันคือแอปพลิเคชั่นคอนโซล " - ทำไมคุณถึงพูดอย่างนี้? บรรทัดที่ไม่ใช่คำสั่งแอพที่ไม่ใช่ TUI DOS แอปพลิเคชัน 'ผิดธรรมชาติ' อย่างใดหรือไม่? :)
Karan

Why would you say this? Are non-command line non-TUI DOS apps 'unnatural' in some way? เรียงจาก ใน 9x พวกเขาทำได้ดี แต่แอพแบบกราฟิก (เช่นเกม) ไม่สามารถทำงานได้อย่างถูกต้องอีกต่อไปใน XP + ดังนั้นส่วนใหญ่ของแอพ DOS ที่ทำงานบน Windows (ดั้งเดิม) เป็นเครื่องมือบรรทัดคำสั่งแทน แอพกราฟิกเต็มรูปแบบ บนเครื่อง 64 บิตปพลิเคชัน 16 บิตไม่ทำงาน natively เลย แต่แม้กระทั่ง 32 บิตปพลิเคชันมักจะปลอบใจปพลิเคชันโดยเฉพาะอย่างยิ่งตั้งแต่Vista ลดลงการสนับสนุนสำหรับแบบเต็มหน้าจอคอนโซล
Synetech

8

ซึ่งแตกต่างจาก COMMAND.COM ซึ่งเป็นโปรแกรม DOS, cmd.exe เป็นแอปพลิเคชัน Windows ดั้งเดิมที่มักจะทำงานในคอนโซล Win32 สิ่งนี้ทำให้สามารถใช้ประโยชน์จากคุณสมบัติที่มีให้กับโปรแกรมเนทีฟบนแพลตฟอร์มที่ไม่สามารถใช้งานได้กับโปรแกรม DOS

ยัง ...

ทั้ง OS / 2 และ cmd.exe รุ่น Windows NT มีข้อความแสดงข้อผิดพลาดโดยละเอียดมากกว่า "คำสั่งหรือชื่อไฟล์" ที่ไม่ครอบคลุม (ในกรณีของคำสั่งที่ผิดรูปแบบ) ของ command.com

มาจากบทความ Wikipedia ที่ให้ข้อมูลนี้

มีการกล่าวถึงคำสั่งที่เก่ากว่าคอมมิวนิเคชั่นที่ถูกนำมาใช้ในการทำงานของ cmd.exe ที่ใหม่กว่า ... ตัวอย่างเช่น ...

การทำงานของ deltree (command.com) ถูกรีดเป็น rd (cmd.exe) ในรูปแบบของพารามิเตอร์ / s

ดังนั้นอย่าลังเลที่จะอ่าน


5

command.com เป็นเชลล์ DOS ซึ่งมีไว้เพื่อความเข้ากันได้

cmd.exe เป็นโปรแกรม Win32 ดั้งเดิมที่สืบทอดมาจาก OS / 2

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