ไฟล์แบตช์ของ Windows: .bat เทียบกับ. cmd?


747

ตามที่ฉันเข้าใจแล้วมัน.batเป็นแบบแผนการตั้งชื่อแบบ 16 บิตแบบเก่าและ.cmdสำหรับ Windows แบบ 32 บิตเช่นเริ่มต้นด้วย NT แต่ฉันยังคงเห็นไฟล์. bat อยู่ทุกหนทุกแห่งและดูเหมือนว่าจะทำงานเหมือนกันทุกประการโดยใช้คำต่อท้าย สมมติว่ารหัสของฉันไม่จำเป็นต้องทำงานกับอะไรที่เก่ากว่า NT จริง ๆ มันสำคัญแค่ไหนที่ฉันตั้งชื่อแบทช์ไฟล์ของฉันหรือมีgotchaรอฉันอยู่ด้วยการใช้คำต่อท้ายผิดหรือเปล่า?


19
เพียงเพิ่มความสับสนตอนนี้เรามีไฟล์. ps1 เช่นกัน
Martin Brown

42
ถ้าฉันไม่ผิดไฟล์. ps1 ควรเป็นไฟล์ของ Windows Power Shell ฉันอาจจะผิด
CMS_95

คำตอบ:


454

จากกลุ่มข่าวนี้โพสต์โดยMark Zbikowskiตัวเอง:

ความแตกต่างระหว่าง. CMD และ. BAT เท่าที่เกี่ยวข้องกับ CMD.EXE คือ: เมื่อเปิดใช้งานส่วนขยาย PATH / APPEND / PROMPT / SET / ASSOC ในไฟล์. CMD จะตั้งค่า ERRORLEVEL โดยไม่คำนึงถึงข้อผิดพลาด .BAT ตั้งข้อผิดพลาดเฉพาะกับข้อผิดพลาด

กล่าวอีกนัยหนึ่งถ้า ERRORLEVEL ถูกตั้งค่าเป็นไม่ใช่ 0 จากนั้นคุณเรียกใช้หนึ่งในคำสั่งเหล่านั้นผลลัพธ์ ERRORLEVEL ที่ได้จะเป็น:

  • ปล่อยให้อยู่คนเดียวด้วยค่าที่ไม่ใช่ 0 ในไฟล์. bat
  • รีเซ็ตเป็น 0 ในไฟล์. cmd

4
นั่นหมายความว่าการใช้สคริปต์. bat จะไม่ส่งคืนค่า ERRORLEVEL 0 สำหรับความสำเร็จหรือไม่? ถ้านั่นเป็นเรื่องจริงฉันไม่เคยสังเกตเลย
djangofan

31
ฉันคิดว่ามันหมายความว่าหาก ERRORLEVEL ถูกตั้งค่าเป็นไม่ใช่ 0 จากนั้นคุณเรียกใช้หนึ่งในคำสั่งเหล่านั้นมันจะถูกทิ้งให้อยู่คนเดียว (ไม่ใช่ -0) ในไฟล์. bat แต่รีเซ็ตเป็น 0 ในไฟล์. cmd แต่ Windows เป็นสิ่งที่เป็นไปได้ค่อนข้างเป็นไปได้จริง ๆ ที่จะทำให้เกิดเสียงปลดที่จะบอกคุณใน Pig Latin ให้ "รีเซ็ต ERRORLEVEL ด้วยตัวคุณเองถ้าคุณใส่ใจมาก!"
MadScientist

5
ฉันคิดว่ามันเป็นการบอกเฉพาะคำสั่งที่เฉพาะเจาะจงเท่านั้นที่จะทำการกระทำที่แตกต่างกัน คนอื่นจะทำงานเหมือนปกติ
PsychoData

1
ฉันเข้าใจแล้ว. ฉันอัพเดตส่วนสำคัญของฉัน เห็นได้ชัดว่ามันไม่ได้ตั้งค่าระดับข้อผิดพลาดเมื่อเรียกset var=..คำสั่ง ซึ่งแปลกเพราะฉันคิดว่านั่นเป็นพฤติกรรมที่คาดหวัง การโต้แย้งสามารถทำได้ทั้งสองอย่าง ฉันจะติดกับไฟล์. bat :-)
wasatchwizard

1
หมายเหตุ - คำสั่ง APPEND ถูกแทนที่ด้วยคำสั่ง DPATH ที่ไม่มีเอกสารแม้ว่าจะDPATH /?ยังคงแสดงรายการคำสั่งเป็น APPEND นอกจากนี้บทความใน Wiki ยังได้รับการแก้ไขเป็นส่วนใหญ่ยกเว้นว่าจะไม่มีรายชื่อ DPATH
dbenham

417

นี่คือการรวบรวมข้อมูลที่ตรวจสอบแล้วจากคำตอบที่หลากหลายและการอ้างอิงที่อ้างถึงในหัวข้อนี้:

  1. command.com เป็นตัวประมวลผลคำสั่ง 16 บิตที่นำมาใช้ใน MS-DOS และยังใช้ในระบบปฏิบัติการซีรีส์ Win9x
  2. cmd.exeเป็นตัวประมวลผลคำสั่ง 32 บิตใน Windows NT (ระบบปฏิบัติการ Windows 64 บิตยังมีรุ่น 64 บิต) cmd.exeไม่เคยเป็นส่วนหนึ่งของ Windows 9x มันเกิดขึ้นใน OS / 2 เวอร์ชั่น 1.0 และเวอร์ชั่น OS / 2 cmdเริ่มต้นที่ 16-bit (แต่ก็ยังเป็นโปรแกรมโหมดป้องกันที่มีการป้องกันอย่างสมบูรณ์พร้อมคำสั่งต่าง ๆ เช่นstart) Windows NT สืบทอดมาcmdจาก OS / 2 แต่รุ่น Win32 ของ Windows NT เริ่มต้นจาก 32 บิต แม้ว่า OS / 2 จะเป็น 32 บิตในปี 1992 แต่cmdก็ยังคงเป็นโปรแกรม OS / 2 1.x 16 บิต
  3. ComSpecกำหนดตัวแปร env โปรแกรมที่จะเปิดตัวโดย.batและ.cmdสคริปต์ (เริ่มต้นด้วย WinNT ค่าเริ่มต้นนี้cmd.exeคือ)
  4. cmd.execommand.comเข้ากันได้กับ
  5. สคริปต์ที่ได้รับการออกแบบมาสำหรับการcmd.exeตั้งชื่อ.cmdเพื่อป้องกันการดำเนินการโดยไม่ตั้งใจใน Windows 9x นามสกุลชื่อไฟล์นี้ยังย้อนกลับไปยัง OS / 2 เวอร์ชัน 1.0 และ 1987

นี่คือรายการcmd.exeคุณลักษณะที่ไม่รองรับโดยcommand.com:

  • ชื่อไฟล์ยาว (เกินรูปแบบ 8.3)
  • ประวัติคำสั่ง
  • การทำให้แท็บสมบูรณ์
  • ตัวละคร Escape: ^(ใช้สำหรับ\ & | > < ^:)
  • ไดเรกทอรีสแต็ค: PUSHD/POPD
  • เลขคณิตจำนวนเต็ม: SET /A i+=1
  • ค้นหา / แทนที่ / สตริงย่อย: SET %varname:expression%
  • การทดแทนคำสั่ง: FOR /F(มีอยู่ก่อนได้รับการปรับปรุง)
  • ฟังก์ชั่น: CALL :label

คำสั่งของการดำเนินการ:

หากสคริปต์ทั้ง. bat และ. cmd (test.bat, test.cmd) อยู่ในโฟลเดอร์เดียวกันและคุณเรียกใช้สคริปต์โดยไม่มีนามสกุล (ทดสอบ) โดยค่าเริ่มต้นสคริปต์เวอร์ชัน. bat จะทำงานแม้ บน Windows 7 บิต 64 ลำดับของการดำเนินการถูกควบคุมโดยตัวแปรสภาพแวดล้อม PATHEXT ดูคำสั่งที่พร้อมท์คำสั่งเรียกใช้งานไฟล์สำหรับรายละเอียดเพิ่มเติม

อ้างอิง:

วิกิพีเดีย: การเปรียบเทียบคำสั่งเชลล์


4
คะแนนย่อยหลายประการ: 1) .bat ไม่จำเป็นต้องเรียกใช้ command.com - ดูเหมือนว่าเมื่อมีการเรียกใช้คอมมิชชันนั้นเป็นปริศนาที่ซับซ้อน 2) command.com ได้รับการแนะนำกับ MS-DOS; 3) cmd.exe สามารถเรียกใช้สคริปต์คอมมิชชันส่วนใหญ่ได้ แต่มีคอมมิชชันเล็กน้อยบางรายการที่ไม่ทำงานใน cmd
Michael Burr

6
cmd.exe ถูกนำมาใช้กับ NT 4.0 ฉันเชื่อว่าไม่ใช่ windows 95
FlySwat

1
Chris: ดูบทความ Wikipedia ฉบับปัจจุบัน ความคิดเห็นโดย Mark Zbikowski ที่groups.google.com/group/…
Mark

2
เพียงเพิ่มข้อมูลเกี่ยวกับเรื่องนี้: dir filenameเหมือนกับdir filename.*ใน command.com; จำเป็นต้องใช้ wild-card ใน cmd.exe ใน command.com rem Create an empty file > empty.txtทำงาน ไม่ได้อยู่ใน cmd.exe
Aacini

2
ดูเหมือนว่าจะเกี่ยวข้องกับคำถามของ OP เล็กน้อยซึ่งเกี่ยวข้องกับความแตกต่างระหว่าง. bat และ. cmd ไม่ใช่ความแตกต่างระหว่าง command.com และ cmd.exe เมื่อฉันอ่านมันคำถามเกี่ยวกับความแตกต่างระหว่างไฟล์. bat และ. cmd สิ่งอื่น ๆ ทั้งหมดเท่ากัน
Stewart

85

คำตอบเหล่านี้ยาวเกินไปและเน้นการใช้แบบโต้ตอบ ความแตกต่างที่สำคัญสำหรับการเขียนสคริปต์คือ:

  • .cmd ป้องกันการดำเนินการโดยไม่ตั้งใจในระบบที่ไม่ใช่ NT
  • .cmd เปิดใช้งานคำสั่งในตัวเพื่อเปลี่ยน Errorlevel เป็น 0 เมื่อสำเร็จ

ไม่น่าตื่นเต้นใช่มั้ย

เคยมีฟีเจอร์เพิ่มเติมจำนวนหนึ่งที่เปิดใช้งานใน.cmdไฟล์ชื่อ Command Extensions อย่างไรก็ตามตอนนี้จะเปิดใช้งานโดยค่าเริ่มต้นสำหรับทั้งไฟล์.batและ.cmdภายใต้ Windows 2000 และใหม่กว่า

บรรทัดล่าง:ในปี 2012 และอื่น ๆ ฉันขอแนะนำให้ใช้โดย.cmdเฉพาะ


7
IMO นั่นคือประเด็นหลัก คุณใช้. cmd เป็นส่วนเสริมสำหรับสคริปต์ที่ใหม่กว่าเมื่อคุณต้องการตรวจสอบให้แน่ใจว่าสคริปต์เหล่านั้นไม่ได้ถูก exececuted บนระบบปฏิบัติการ 16 บิตที่เก่ากว่าหรือหากคุณไม่แน่ใจว่าจะสามารถใช้งานได้
โอลิเวอร์

12
ฉันซาบซึ้งในคำตอบที่รัดกุมเน้นประโยชน์และชัดเจนเหนือกำแพงที่เต็มไปด้วยคำตอบที่ไร้ประโยชน์คล้าย ๆ มหาวิทยาลัย
Liquid Core

7
ฉันเป็นอาจารย์มหาวิทยาลัยและฉันเห็นด้วยกับ @ Core Liquid! คำตอบที่รัดกุมและจริงจังเป็นวิธีที่เราเรียนรู้ (เมื่อเรายังไม่รู้อะไรเลย) จากนั้นเมื่อเราเข้าใจแล้วเรารู้สึกอยากกระตุ้นให้อธิบายด้วยวิธีที่เป็นนามธรรมและเข้าใจยาก แปลก. สังเกตดี!
ยูเรก้า

24

ไม่ - มันไม่สำคัญเลยแม้แต่น้อย ใน NT นามสกุล. bat และ. cmd ทั้งคู่ทำให้ตัวประมวลผล cmd.exe ประมวลผลไฟล์ในลักษณะเดียวกัน

ข้อมูลที่น่าสนใจเพิ่มเติมเกี่ยวกับ command.com กับ cmd.exe บนระบบ WinNT-class จาก MS TechNet ( http://technet.microsoft.com/en-us/library/cc723564.aspx ):

พฤติกรรมนี้เผยให้เห็นถึงคุณลักษณะที่ละเอียดอ่อนของ Windows NT ที่สำคัญมาก เชลล์ MS-DOS 16 บิต (COMMAND.COM) ที่มาพร้อมกับ Windows NT ได้รับการออกแบบมาเป็นพิเศษสำหรับ Windows NT เมื่อคำสั่งถูกป้อนสำหรับการดำเนินการโดยเชลล์นี้มันไม่ได้ดำเนินการจริง แต่จะจัดเก็บข้อความคำสั่งและส่งไปยังเชลล์คำสั่ง CMD แบบ 32 บิตแทนเพื่อดำเนินการ เนื่องจากคำสั่งทั้งหมดถูกดำเนินการจริงโดย CMD.EXE (เชลล์คำสั่งของ Windows NT) เชลล์ 16 บิตจะสืบทอดคุณสมบัติและสิ่งอำนวยความสะดวกทั้งหมดของเชลล์ Windows NT แบบเต็ม


5
มันอาจสำคัญ; เมื่อข้อความลิงก์ของคุณระบุความแตกต่างนั้นบอบบาง
Gringo Suave

คุณสามารถบังคับให้ command.com เพื่อดำเนินการคำสั่ง dos ได้โดยระบุคำสั่งบนบรรทัดคำสั่ง ดูcommand /c verเมื่อเทียบกับการเริ่ม command.com และพิมพ์ ver
phd443322

ชื่อเรื่อง: D เห็นมาก. bat จากผู้ชายมาจากอดีต! ใช้. cmd! นอกจากนี้ยังไม่สามารถเชื่อว่า NT ยังคงใช้วันนี้ ...
hfrmobile

@hfrmobile: เมื่อฉันพูดถึง 'NT' ฉันหมายถึงทุกรุ่นของ Windows ที่เราใช้ NT (ไม่ใช่ 9x) โดยพื้นฐานแล้ว NT, Win2k และ Windows ทุกรุ่นสำหรับเดสก์ท็อปหรือเซิร์ฟเวอร์ตั้งแต่ XP และชื่อของไฟล์อาจให้ข้อมูลเชิงลึกเกี่ยวกับความคิดและรูปแบบการเข้ารหัสของบุคคลที่เขียนไฟล์ แต่เท่าที่ล่ามไม่มีความแตกต่าง
Michael Burr

16

RE:เห็นได้ชัดว่าเมื่อมีการเรียกใช้ command.com เป็นปริศนาที่ซับซ้อน

หลายเดือนที่ผ่านมาในระหว่างโครงการเราต้องหาสาเหตุว่าทำไมบางโปรแกรมที่เราต้องการเรียกใช้ภายใต้ CMD.EXE นั้นจริงๆแล้วทำงานภายใต้ COMMAND.COM คำถาม "โปรแกรม" เป็นไฟล์. BAT ที่เก่าแก่มากซึ่งยังคงทำงานทุกวัน

เราค้นพบว่าสาเหตุที่ไฟล์แบตช์ทำงานภายใต้ COMMAND.COM คือสาเหตุที่เริ่มต้นจากไฟล์. PIF (หรือเก่าแก่) เนื่องจากการตั้งค่าการกำหนดค่าหน่วยความจำพิเศษที่มีเฉพาะผ่าน PIF นั้นไม่เกี่ยวข้องเราจึงแทนที่ด้วยทางลัดบนเดสก์ท็อปทั่วไป

ไฟล์แบตช์เดียวกันเปิดตัวจากทางลัดทำงานใน CMD.EXE เมื่อคุณคิดเกี่ยวกับมันสิ่งนี้ทำให้รู้สึก เหตุผลที่เราใช้เวลานานกว่าจะคิดออกมาเป็นส่วนหนึ่งเนื่องจากความจริงที่ว่าเราลืมว่ารายการในกลุ่มเริ่มต้นเป็น PIF เพราะมันมีการผลิตตั้งแต่ปี 1998


1
นี่คือระบบปฏิบัติการอะไร มีอะไรบางอย่างก่อน XP?
phk

14

ยังคงอยู่บน Windows 7 ไฟล์ BAT มีความแตกต่างเช่นนี้: หากคุณเคยสร้างไฟล์ TEST.BAT และ TEST.CMD ในไดเรกทอรีเดียวกันและคุณรัน TEST ในไดเรกทอรีนั้นมันจะเรียกใช้ไฟล์ BAT

C:\>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

C:\Temp>echo echo bat > test.bat

C:\Temp>echo echo cmd > test.cmd

C:\Temp>test

C:\Temp>echo bat
bat

C:\Temp>

มันเป็นเช่นนั้นเพราะ test.bat เป็นตัวอักษรก่อน test.cmd Windows ทำสิ่งที่ต้องการให้สำเร็จ
เดวิด

26
@ David: ไม่จริง สิ่งนี้เกิดขึ้นเพราะในPATHEXTตัวแปรส่วนขยาย. BAT จะถูกวางไว้ก่อน. CMD หนึ่ง (ดังแสดงในคำตอบนี้) หากคุณแก้ไขคำสั่งนี้ใน PATHEXT test.cmd จะถูกดำเนินการแทน
Aacini

อืมฉันหวังว่าพวกเขาจะอยู่ในลำดับอื่น ๆ ฉันเดาว่า MS จะต้องค้นพบ (หรือสมมติว่า) ซอฟต์แวร์ที่มีอยู่บางตัวได้ส่งไฟล์. CMD และไฟล์. BAT ที่มีชื่อไฟล์เดียวกันโดยที่ไฟล์. CMD นั้นไม่ได้มีวัตถุประสงค์เพื่อเป็นอินพุตสำหรับ cmd (ยังไม่ได้ส่ง) exe แต่อาจมีสิ่งอื่น ๆ อีกมากมายเช่นคำสั่งสำหรับเชลล์อื่น ๆสคริปต์กำหนดค่าที่แอปพลิเคชันอ่านหรือแอปพลิเคชันไบนารีบางประเภท (อย่างน้อยนั่นคือความเข้าใจของฉันเกี่ยวกับวิธีปกติที่ MS จบลงด้วยพฤติกรรมที่ดูไม่เหมาะสม)
SamB

นอกจากนี้ยังควรสังเกตว่าไดเรกทอรีปัจจุบันมาก่อนไดเรกทอรีอื่น ๆ ในPATHตัวแปรสภาพแวดล้อมโดยไม่คำนึงถึงส่วนขยาย
Turkeyphant

13

เนื่องจากโพสต์ต้นฉบับเกี่ยวข้องกับผลที่ตามมาของการใช้คำต่อท้าย . bat หรือ. cmd จึงไม่จำเป็นต้องใช้คำสั่งภายในไฟล์ ...

ข้อแตกต่างอื่น ๆ อย่างหนึ่งระหว่าง. bat และ. cmd คือถ้ามีสองไฟล์ที่มีชื่อไฟล์เหมือนกันและทั้งสองนามสกุลนั้น:

  • การป้อนชื่อไฟล์หรือชื่อไฟล์. bat ที่บรรทัดคำสั่งจะเรียกใช้ไฟล์. bat

  • ในการเรียกใช้ไฟล์. cmd คุณจะต้องป้อนชื่อไฟล์ . cmd


2
ใช่มั้ย? หากฉันใส่ไฟล์ cmd ใน dir ของฉันฉันไม่จำเป็นต้องระบุนามสกุลไฟล์เพื่อเรียกใช้ ตัวอย่าง: echo notepad.exe% *> np.cmd จากนั้นถ้าฉันพิมพ์ "np mytextfilename.txt" มันจะแสดงแผ่นจดบันทึก ฉันไม่ต้องพิมพ์ "np.cmd" เพื่อเรียกใช้
Jon Davis

2
@ stimpy77: นี่เป็นจริงถ้า np.cmd เป็นไฟล์เดียวที่มีชื่อนั้น แต่"หากไฟล์สองไฟล์มีชื่อไฟล์เดียวกันและนามสกุลทั้งสอง"วิธีเดียวที่จะเรียกใช้. cmd คือการรวมส่วนขยาย ..
Aacini

1
นี่เป็นความจำเป็นในการแก้ไขความกำกวมของเชลล์ใด ๆ ไม่มีอะไรเกี่ยวข้องกับความแตกต่างทางเทคนิคระหว่าง. cmd กับ. bat อาจเป็นเพราะ filename.bat นำหน้า filename.cmd ตามลำดับตัวอักษร
Jon Davis

6
มันขึ้นอยู่กับPATHEXTตัวแปรสภาพแวดล้อม คำสั่งซื้อที่มีนามสกุลจะปรากฏขึ้นมีลำดับความสำคัญหากไม่ได้ระบุนามสกุล นอกจากนี้ยังมีมูลค่าการกล่าวขวัญว่าไม่จำเป็นต้องระบุส่วนขยายสำหรับไฟล์ที่ส่วนขยายปรากฏในตัวแปร env
Ricardo Zorio

8

ทุกอย่างที่ทำงานในชุดควรทำงานใน cmd; cmd มีส่วนขยายบางอย่างสำหรับการควบคุมสภาพแวดล้อม เช่นกัน cmd จะถูกดำเนินการโดยล่าม cmd ใหม่ดังนั้นจึงควรเร็วกว่า (ไม่สังเกตเห็นได้ชัดในไฟล์สั้น ๆ ) และ stabler ขณะที่ bat ทำงานภายใต้สภาพแวดล้อม 16 บิตจำลอง NTVDM


ไม่ควรสร้างความแตกต่างในความเร็ว .batไม่ทำงานภายใต้ DOS ใน NT VDM เริ่มต้นเมื่อโปรแกรมต้องการและไม่รองรับ Windows 64 บิตแม้ว่าฉันเชื่อว่า. bat จะเป็น
Gringo Suave

3

การเรียกใช้ไฟล์. cmd และ. bat นั้นแตกต่างกันเนื่องจากในตัวแปร. cmd errorlevel มันสามารถเปลี่ยนคำสั่งที่ได้รับผลกระทบจากส่วนขยายคำสั่ง เกี่ยวกับมันจริงๆ


ของหยาบ ^. ^ มีความแตกต่างในภาษาคำสั่งที่ใช้สำหรับแต่ละไฟล์ (. bat ได้รับรุ่นที่เข้ากันได้) บางเหล่านี้สามารถแสดงโดยสคริปต์นี้จากกว่าที่นี่: @echo off&setlocal ENABLEEXTENSIONS call :func&&echo/I'm a cmd||echo/I'm a bat goto :EOF :func md;2>nul set var=1
zask

4
ในไฟล์. cmd ทุกคำสั่งจะตั้ง errorlevel ในไฟล์. bat บางคำสั่งจะปล่อย errorlevel ไม่เปลี่ยนแปลงตามที่อธิบายไว้ในคำตอบที่ยอมรับ
jeb

1
BAT ถูกสร้างขึ้นเพื่อโต้ตอบกับ COMMAND.COM ซึ่งเป็นตัวแปลคำสั่งของ DOS Microsoft ใช้คำสั่ง DOS ส่วนใหญ่ในล่ามใหม่ชื่อ CMD EXE CMD ถูกสร้างขึ้นเพื่อเชื่อมต่อกับ CMD.EXE และจะหยุดความเข้ากันได้กับ COMMAND.COM ส่วนใหญ่รู้จักวิธีจัดการตัวแปร errorlevel เมื่อใช้ BAT ตัวแปรนี้จะถูกเปลี่ยนเฉพาะเมื่อเกิดข้อผิดพลาดจริงและไม่มีการเปลี่ยนแปลงสถานะเกิดขึ้นเมื่อแต่ละคำสั่งดำเนินการสำเร็จ สิ่งนี้ไม่เป็นจริงสำหรับ CMD เนื่องจากตัวแปร errorlevel จะยังคงเปลี่ยนสถานะแม้ว่าจะไม่มีข้อผิดพลาดเกิดขึ้น
zask

3

ผมเชื่อว่าถ้าคุณเปลี่ยนค่าของตัวแปรสภาพแวดล้อม ComSpec ไป%SystemRoot%system32\cmd.exe(CMD) แล้วมันไม่สำคัญว่าถ้านามสกุลไฟล์เป็นหรือ.BAT .CMDฉันไม่แน่ใจ แต่นี่อาจเป็นค่าเริ่มต้นสำหรับ WinXP ขึ้นไป


1

ปิดหัวข้อเล็กน้อย แต่คุณถือว่าWindows Scripting Host แล้วหรือยัง คุณอาจพบว่ามันดีกว่า


13
สำหรับเรื่องนั้น PowerShell ซึ่งเลิกใช้ WSH / cscript.exe
จอนเดวิส

3
@ stimpy77 จริงแม้ว่า powershell ดูเหมือนว่าน่ากลัวสำหรับฉัน
Marcin

2
ฉันพบว่า WSH แย่กว่านั้นมาก ฉันคิดว่ามันทั้งหมดขึ้นอยู่กับสิ่งที่เราวัดสำหรับ "แย่" PowerShell มีเวลาเริ่มต้นที่เลวร้าย ทุกอย่างเกี่ยวกับมันเป็น IMO ที่ยอดเยี่ยมอย่างแน่นอน
Jon Davis

แก้ปัญหาการจัดรูปแบบ แต่เพื่อเร่งเวลาเริ่มต้นของ PSH ให้ลองใช้งาน: Set-Alias ​​ngen @ (dir (join-path $ {env: \ windir} "Microsoft.NET \ Framework") ngen.exe -recurse | sort -descending lastwritetime) [0] .fullName [บรรทัดใหม่ที่นี่] [appdomain] :: currentdomain.getassemblies () | % {ngen $ _. location}
mjbnz

1
ปิดหัวข้อโดยสิ้นเชิง
HappyDog

1

ส่วนขยายไม่สร้างความแตกต่าง

มีความแตกต่างเล็กน้อยระหว่างที่มีการจัดการไฟล์ครับCOMMAND.COMCMD.EXE


-10

ความแตกต่าง:

ไฟล์. cmd ถูกโหลดเข้าสู่หน่วยความจำก่อนที่จะถูกดำเนินการ ไฟล์. bat เรียกใช้บรรทัดอ่านบรรทัดถัดไปเรียกใช้บรรทัดนั้น ...

คุณสามารถเจอสิ่งนี้เมื่อคุณเรียกใช้งานไฟล์สคริปต์แล้วแก้ไขก่อนที่จะดำเนินการเสร็จ ไฟล์ bat จะถูกทำให้ยุ่งเหยิงโดยสิ่งนี้ แต่ไฟล์ cmd จะไม่


ตามที่ได้มีการสร้างขึ้นตัวแปร ComSpec env จะกำหนดว่าจะเปิดตัวโปรแกรมเป็นหลักหรือไม่คุณบอกว่า command.com อ่านไฟล์ทีละบรรทัดขณะที่ cmd.exe โหลดไฟล์ลงในหน่วยความจำล่วงหน้าหรือไม่ คุณสามารถอ้างอิงข้อมูลนี้ได้หรือไม่?
Chris Noe

24
มันผิดสำหรับ Vista และ XP ทั้งสองชนิดเป็นไฟล์ที่อ่านทีละบรรทัด หากคุณหยุดชั่วคราวไฟล์. cmd หรือ. bat และแก้ไขรหัสใหม่จะถูกเรียกใช้งาน
jeb

4
คุณอาจจะคิดว่าการ.btm( "ชุดหน่วยความจำ") เป็นไฟล์จ้างงานกับเจพีซอฟท์แวล่ามคำสั่งทดแทน
JdeBP

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

2
คุณไม่ควรอภิปราย. bat และ. cmd ไม่แตกต่างกันในลักษณะนั้น ทั้งคู่มักจะอ่านทีละบรรทัด คุณสามารถทดสอบได้หากคุณไม่เชื่อ สร้างไฟล์แบตช์ที่echo 1&pauseเรียกใช้งานแล้ว คุณจะเห็นและ1 Press any key to continue...ในขณะที่หยุดชั่วคราวเพิ่มบรรทัดใหม่echo 2&pauseด้วยเครื่องมือแก้ไขภายนอก กดปุ่ม คุณจะเห็นและ2 Press any key to continue...คุณสามารถลองเพิ่มได้echo 3&pauseในตอนแรก 2เมื่อคุณกดปุ่มหลังจากนั้นอีกครั้งคุณจะเห็น
venimus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.