ฉันทะเลาะกับเพื่อนของฉันว่าCommand Promptเป็นเพียงรุ่น GUI ของ MS-DOS ซึ่งทำงานในสภาพแวดล้อมแบบ Windows เขาไม่เห็นด้วยกับฉันเลย
ถูกต้องใคร
cmd.exe
เป็นสัตว์ร้ายต่างจาก MS-DOS
ฉันทะเลาะกับเพื่อนของฉันว่าCommand Promptเป็นเพียงรุ่น GUI ของ MS-DOS ซึ่งทำงานในสภาพแวดล้อมแบบ Windows เขาไม่เห็นด้วยกับฉันเลย
ถูกต้องใคร
cmd.exe
เป็นสัตว์ร้ายต่างจาก MS-DOS
คำตอบ:
นี่เป็นเรื่องจริงเพียงครั้งเดียว แต่มันไม่ใช่อีกต่อไป
จากMS-DOS # อินเตอร์เฟสบรรทัดคำสั่งของ Windows - Wikipedia :
Microsoft Windows ทุกรุ่นมี MS-DOS เช่น command-line interface (CLI) สิ่งนี้สามารถเรียกใช้ DOS และหลาย ๆ อย่าง Win32, OS / 2 1.x และยูทิลิตี้บรรทัดคำสั่ง Posix ในเซสชันบรรทัดคำสั่งเดียวกันทำให้สามารถไพพ์ระหว่างคำสั่งได้ อินเทอร์เฟซผู้ใช้และไอคอนสูงถึง Windows 2000 ตามอินเทอร์เฟซดั้งเดิมของ MS-DOS
Consumer Windows (สูงสุด 3.11, Win9x, WinME) วิ่งเป็น Graphical User Interface (GUI) ที่ทำงานอยู่ด้านบนของ MS-DOS ด้วย Windows 95, 98 และ ME ส่วน MS-DOS ได้ถูกรวมเข้าด้วยกันทำให้ระบบปฏิบัติการทั้งสองเป็นแพคเกจที่สมบูรณ์ บรรทัดคำสั่งเข้าถึงบรรทัดคำสั่ง DOS (โดยปกติคือ command.com) ผ่านโมดูล Windows (winoldap.mod)
บรรทัดใหม่ของ Windows (Windows NT) บูตผ่านเคอร์เนลที่มีวัตถุประสงค์เพื่อโหลด Windows เท่านั้น อย่างใดอย่างหนึ่งไม่สามารถเรียกใช้โปรแกรมประยุกต์ Win32 ในระบบตัวโหลดในลักษณะที่ OS / 2, UNIX หรือ Consumer Windows สามารถเปิดเซสชันโหมดอักขระ
ดังนั้นไม่มีใน Windows ทุกรุ่นจากตระกูล NT (เช่น XP, Vista, 7, 8) พรอมต์คำสั่งและ MS-DOS นั้นมีลักษณะคล้ายกัน แต่แตกต่างกันมาก
พวกเขาต่างกัน - พรอมต์คำสั่งไม่ใช่ MS-DOS - แต่เท่าที่ผู้ใช้กังวลว่าพวกเขาอาจเป็นสิ่งเดียวกับที่พวกเขาทำสิ่งเดียวกัน
ดังนั้นมันขึ้นอยู่กับมุมมองของคุณ จากมุมมองทางเทคนิคของเพื่อนของคุณมันถูกต้อง แต่จากมุมมองของผู้ใช้คุณถูกต้อง (เรียงตามที่มีความแตกต่างที่ผู้เชี่ยวชาญจะเห็น)
(ยกเว้นนิยามของความเท่าเทียมกันไม่ขยายผ่านมา » มันเป็นอินเตอร์เฟซที่ข้อความและฉันสามารถเรียกใช้โปรแกรมจากมัน. « )
สิ่งที่จะดำเนินการเมื่อคุณคลิกCommand Promptใน Start Menu เป็นตัวประมวลผลคำสั่งของ Windows cmd.exe
อาคา คำสั่งในตัวและไวยากรณ์การเขียนสคริปต์ (รวมถึงนิสัยใจคอจำนวนมาก) นั้นอิงตามแบบโบราณcommand.com
จาก CP / M และ MS-DOS รุ่นใหม่กว่า แต่นอกเหนือจากนั้นพวกมันแยกจากกันอย่างสิ้นเชิง นอกจากนี้ยังcommand.com
เป็นโปรแกรม 16 บิตในขณะที่cmd.exe
เป็นแอพพลิเคชันคอนโซลของ Windows
สิ่งต่าง ๆ ใน Windows 95, 98 และ ME ซึ่งcommand.com
จะทำงานใน MS-DOS VM โดย Windows ทำหน้าที่เป็นไฮเปอร์ไวเซอร์ (ใช่พวกเขามีสิ่งนั้นในเวลานั้น) ที่นั่นคุณมีเครื่องเสมือนทั้งหมดที่ใช้งาน DOS แต่ใน Windows NT, 2000, XP, Vista และ 7 - ไม่ ดอสอาศัยอยู่ที่นั่นntvdm.exe
ซึ่งเป็น NT Virtual DOS Machine ซึ่งเป็นเลเยอร์การจำลองบาง ๆ ที่จับการโทรที่ CPU ไม่สามารถเรียกใช้งานได้โดยตรง (ซึ่งเป็นสาเหตุที่ทำให้ทำงานได้เร็วขึ้น
ไม่ว่าในกรณีใด ๆ แม้แต่command.com
เพียงเปลือกสำหรับ DOS มันไม่ใช่ระบบปฏิบัติการ
ข้างในฉันประจบประแจงจริง ๆ ทุกครั้งที่ฉันเห็นคนที่อ้างถึงหน้าต่างที่มีข้อความสีเทาบนดำเป็น MS-DOS ในกรณีส่วนใหญ่พวกเขาไม่รู้จริง ๆ ว่าพวกเขาหมายถึงอะไร
จากสิ่งที่ฉันเข้าใจ MS-DOS เป็นระบบปฏิบัติการดิสก์ที่ Microsoft เปิดตัว พรอมต์คำสั่งเป็นอินเทอร์เฟซที่ไม่ใช่แบบกราฟิกที่ช่วยให้คุณสามารถโต้ตอบกับระบบปฏิบัติการของคุณ
Command Prompt เป็นแอพพลิเคชั่นตัวแปลบรรทัดคำสั่งที่มีอยู่ในระบบปฏิบัติการ Windows ส่วนใหญ่เรียกอย่างเป็นทางการว่า Windows Command Processor แต่บางครั้งเรียกว่า command command Command Prompt เป็นโปรแกรม Windows ที่เลียนแบบความสามารถของบรรทัดคำสั่งจำนวนมากที่มีใน MS-DOS แต่ไม่ใช่ MS-DOS จริงๆ
Command Prompt เป็นคอมมิวนิตี้ GUI เวอร์ชั่นใน MS-DOS cmd.exe เป็นแอปพลิเคชัน Windows ดั้งเดิมที่มักจะทำงานในคอนโซล Win32 สิ่งนี้ทำให้สามารถใช้ประโยชน์จากคุณสมบัติที่มีให้กับโปรแกรมเนทีฟบนแพลตฟอร์มที่ไม่สามารถใช้งานได้กับโปรแกรม DOS
ตัวอย่างเช่นเนื่องจาก cmd.exe เป็นแอปพลิเคชันโหมดข้อความดั้งเดิมบน OS / 2 จึงสามารถใช้ไพพ์จริงในไพพ์ไลน์คำสั่งทำให้ทั้งสองฝั่งของไพพ์ไลน์ทำงานพร้อมกัน ดังนั้นจึงเป็นไปได้ที่จะเปลี่ยนเส้นทางข้อผิดพลาดมาตรฐานใน cmd.exe ซึ่งแตกต่างจาก COMMAND.COM (COMMAND.COM ใช้ไฟล์ชั่วคราวและรันทั้งสองด้านตามลำดับโดยเรียงต่อกัน)
ในความเป็นจริง cmd.exe เป็นโปรแกรม Windows ที่ทำหน้าที่เป็นล่ามบรรทัดคำสั่งเหมือนดอส โดยทั่วไปสามารถใช้งานร่วมกันได้ แต่ให้ส่วนขยายที่ระบุถึงข้อ จำกัด บางประการของ COMMAND.COM (คำอธิบายข้างต้นถูกอ้างถึงโดย Wikipedia)
เพื่อนของคุณพูดถูก MS-DOS คือ / เป็นระบบปฏิบัติการ (Microsoft Disk Operating System คือตัวย่อย่อมาจาก) UI สำหรับ DOS เรียกว่าพรอมต์คำสั่ง( the )
Windows สองสามเวอร์ชันแรกทำงานบน DOS (ทำให้พวกเขามีสภาพแวดล้อมการทำงานทางเทคนิค แต่ฉันไม่แน่ใจว่าจะมีใครแยกความแตกต่างนั้นได้อีก) แต่ต่อมา OS ก็เริ่มต้นด้วยเคอร์เนล NT ไม่ได้ - DOS หายไป
อย่างไรก็ตามผู้คนยังคงต้องการฟังก์ชั่นที่พรอมต์คำสั่งให้และแทนที่จะเป็นคอมไฟล์เราได้ command.exe (และทุกวันนี้ cmd.exe) ซึ่งเมื่อทำงานจะทำให้เรามีพรอมต์คำสั่ง
แต่นั่นไม่ใช่คำสั่ง (หรือที่ใกล้กับที่แรก) เท่านั้นที่ผู้คนเคยใช้ Command Prompts เรียกอีกอย่างว่า Shells และ Unix มีมากมายและ Command ต่างกันและมีประสิทธิภาพมาก การพูดถึงพลังงาน Microsoft ได้สร้างพรอมต์คำสั่งใหม่สำหรับ Windows ชื่อ PowerShell ซึ่งมีประสิทธิภาพและน่าสนใจอย่างไม่น่าเชื่อ ดู Wikipedia สำหรับข้อมูลเพิ่มเติม: http://en.wikipedia.org/wiki/Command-line_interface#Operating_System_Command-Line_Interfaces
เห็นได้ชัดว่าผู้คนจำนวนมากไม่รู้ตัวว่า DOS Prompt และ Windows Command Prompt นั้นไม่เหมือนกัน จริงๆแล้วพวกเขาเป็นสองโปรแกรมที่แตกต่างกัน - COMMAND.COM และ CMD.EXE ตามลำดับ
ประการแรกเนื่องจากความแตกต่างในแพลตฟอร์ม (DOS เทียบกับ Windows) และล่าม (command.com vs cmd.exe) จะมีความแตกต่างที่ชัดเจนเช่น
mode con:cols=COL lines=ROW
คำสั่งให้ปรับขนาดคอนโซลและไม่มีtitle
คำสั่งแต่ก็มีความแตกต่างที่สำคัญในความสามารถและไวยากรณ์ของคำสั่งภายในระหว่าง command.com และ cmd.exe รวมถึงเครื่องมือภายนอกบางอย่างในสองสภาพแวดล้อม ใน MS-DOS มี
ไม่มีฟังก์ชั่นบล็อคโค้ด()
และขอบเขตภายในซึ่งหมายถึง
for
, if
... ต้องตามด้วยคำสั่งเดียวในบรรทัดเดียวกันexit /b
หรือgoto :eof
setlocal
และendlocal
goto
สามารถข้ามไปที่ป้ายกำกับcall
เท่านั้นจึงจะเริ่มได้อีกชุดไฟล์คำสั่งไม่สามารถรวมกลุ่มกันได้เช่น
(
command1
command2
) >output.txt
^
ไม่มีตัวหนี การพิมพ์อักขระพิเศษอาจทำให้เจ็บปวดและไม่มีความเป็นไปได้ในการรันคำสั่งหลายบรรทัด
if
if cmdextversion
และif defined
if [/i] string1 compare-op string2
call set %%var%suffix%=string
) ของตัวแปรและไม่มีการขยายตัวล่าช้า (เช่นecho !var%suffix%!
)~xxxV
รองรับตัวแปร%variable:~num1,num2%
หรือการแทนที่สตริง%variable:str=newstr%
set
และ
set /a
คุณไม่สามารถทำเลขคณิตได้set /p
ซึ่งหมายความว่าการอ่านอินพุตของผู้ใช้เป็นความเจ็บปวดset "var=value"
ไวยากรณ์%*
สำหรับบรรทัดคำสั่งทั้งหมดfor /d
, หรือfor /r
for /l
ไม่ต้องfor /f
อ่านอินพุตจากไฟล์ก็ยากเช่นกัน รูปแบบเดียวของfor
ใน DOS คือFOR %variable IN (set) DO command [command-parameters]
findstr
และfind
ไม่รองรับ Unicode%CD% %DATE% %TIME% %RANDOM% %ERRORLEVEL% %CMDEXTVERSION% %CMDCMDLINE% %HIGHESTNUMANODENUMBER%
pushd/popd
cd /d
ไม่ ยังไม่มีcd path with spaces
และcd "path with spaces"
เนื่องจากขาดการสนับสนุนชื่อไฟล์ที่ยาวcolor
forfiles
assoc
(เนื่องจากไม่มี GUI และไฟล์ที่ต้องเปิดด้วยตนเองจากบรรทัดคำสั่งดังนั้นจึงไม่จำเป็นต้องเชื่อมโยงไฟล์)คำสั่งภายนอกที่มีประโยชน์มากมายใน Windows เช่นตำแหน่งเรียงลำดับมากขึ้น (ในบางรุ่นของ DOS) ตัวเลือก ... จะหายไปใน DOS ด้วย
และนี่คือสิ่งที่ MS 'Rich Turner พูด
นอกจากนี้ Cmd! = MS-DOS!
ฉันยังต้องการชี้ให้เห็นถึงความเข้าใจผิดที่พบบ่อยซึ่งดำเนินการโดยบทความเช่นเดียวกับที่กล่าวข้างต้น: Cmd <> MS-DOS!
ในความเป็นจริง:
- Microsoft ส่ง MS-DOS รุ่น "ใหม่" (v8.0 ใน Windows ME) ครั้งล่าสุดเมื่อวันที่ 16 กันยายน 2000 - 16 ปีที่ผ่านมา (ตามที่เขียนนี้) !!
- MS-DOS เป็นระบบปฏิบัติการ (แม้ว่าระบบปฏิบัติการค่อนข้างง่ายตามมาตรฐานของวันนี้) ซึ่งส่วนติดต่อผู้ใช้หลักเป็นเชลล์บรรทัดคำสั่งจนกระทั่ง Windows 3.x & 9.x มาถึงและวิ่งบน / รอบ ๆ MS-DOS
- ภาษาสคริปต์บรรทัดคำสั่งของ MS-DOS นั้นค่อนข้างสั้นและทรงพลังพอสมควร แต่ขาดคุณสมบัติที่สมบูรณ์ยิ่งขึ้นและคุณสมบัติขั้นสูงที่เราได้รับใน PowerShell, Bash และอื่น ๆ
- ในขณะที่รุ่นต่อมาของ MS-DOS เติบโตขึ้นในความซับซ้อนและเพิ่ม / แทนที่การชุมนุมเก่าด้วยรหัสใหม่ที่เขียนใน 'C' ส่วนใหญ่ของ MS-DOS ส่วนใหญ่ยังคงเขียนในชุด x86 เพื่อประสิทธิภาพและเพราะมันเป็นวิธีเดียวในเวลาที่ เข้าถึงอุปกรณ์ฮาร์ดแวร์และอุปกรณ์ต่อพ่วงมากมาย สิ่งนี้ทำให้ MS-DOS ไม่สามารถพกพาได้กับซีพียูที่ไม่ใช่ x86 หากคุณเอียงมากคุณสามารถดาวน์โหลดซอร์สโค้ดสำหรับ MS-DOS v1.1 และ v2.0 เพื่อดูว่า MS-DOS รุ่นก่อนหน้านี้ถูกเขียนในชุดประกอบ x86 มากเท่าใด (คำแนะนำ: สวยมาก มัน)!
https://devblogs.microsoft.com/commandline/rumors-of-cmds-death-have-been-greatly-exaggerated/
.bat
ไฟล์สมัยใหม่ต่างจาก.bat
ไฟล์MS DOS รุ่นเก่าอย่างไร?โดยสรุปฟังก์ชั่นที่ชาญฉลาดพวกเขาอาจจะคล้ายกันเล็กน้อย แต่แตกต่างกันอย่างมาก