́╗┐ 'ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอก


25

เมื่อเรียกใช้ไฟล์บางไฟล์ (โดยส่วนใหญ่เป็นชุด) โดยใช้ PsExec ฉันจะได้รับสัญลักษณ์แปลก ๆ เหล่านี้ก่อนคำสั่งของฉัน ความคิดเริ่มต้นของฉันคือฉันกำลังใช้การเข้ารหัสที่ไม่ถูกต้อง แต่หลังจากตรวจสอบฉันรู้ว่าไฟล์ทั้งหมดของฉันใช้ UTF-8


ทำไมไม่แปลงเป็น UTF-16LE แทนล่ะ
Ignacio Vazquez-Abrams

ความแตกต่างคืออะไร?
miestasmia

ข้อแตกต่างคือโดยปกติ Windows จะไม่ใช้ UTF-8
Ignacio Vazquez-Abrams

คำตอบ:


32

ฉันได้รับสัญลักษณ์แปลก ๆ เหล่านี้ before ก่อนคำสั่งของฉัน […] ไฟล์ทั้งหมดของฉันใช้ UTF-8

นี่มีสองสาเหตุ:

  1. cmd.exeไม่รองรับ UTF-8 มันใช้การเข้ารหัสไบต์เดียวอย่างใดอย่างหนึ่งซึ่งมักเรียกว่า "OEM" - cp437, cp775 และอื่น ๆ ขึ้นอยู่กับการตั้งค่าภูมิภาคของระบบ

    (ฉันคาดหวังว่ามันจะรองรับ UTF-16 เช่นกัน แต่ไม่ชัดเจนแม้ว่าจะเพิ่ม UTF-16 BOM)

  2. เครื่องมือแก้ไขข้อความของคุณกำลังเพิ่ม UTF-8 "เครื่องหมายคำสั่งซื้อไบต์" (ไบต์EF BB BF) ไปยังจุดเริ่มต้นของไฟล์ UTF-8 ทั้งหมด

    เมื่อcmd.exeอ่านสคริปต์ของคุณจะไม่รู้ว่าจะทำอย่างไรกับเครื่องหมาย - มันเห็น BOM เป็นอักขระ cp437 ธรรมดาสามตัว และพยายามใช้มันเป็นส่วนหนึ่งของชื่อคำสั่ง

กำหนดค่าโปรแกรมแก้ไขของคุณเพื่อหยุดการเพิ่ม BOM ไปยังไฟล์ที่เข้ารหัส UTF-8 (มันสมเหตุสมผลใน UTF-16 เท่านั้นและไร้ประโยชน์มากใน UTF-8)

จะรวบรวมไฟล์แบทช์เป็น exe เพื่อแก้ปัญหาหรือไม่

เอ่อ

อะไร


3
ฉันจะไม่พูดว่า BOM นั้น "ไร้ประโยชน์มาก" ใน UTF-8 แม้ว่าพวกเขาจะอยู่ในกรณีนี้โดยเฉพาะ แอปพลิเคชั่นหลายตัวใช้ในการพิจารณาข้อความจริง ๆ แล้วเป็น UTF-8 และไม่ใช่การเข้ารหัสอื่น
Arch สูง Dour

19

เพื่อเพิ่มเติมคำตอบของ @ dsolimanoถ้าคุณกำลังโดยเฉพาะการใช้Visual Studioและในกรณีของฉันมันเป็น2013ผมคงได้โดยการทำสิ่งต่อไปนี้:

  1. เปิดVisual Studio
  2. คลิกที่เครื่องมือ > ตัวเลือก
  3. คลิกแก้ไขข้อความ > ส่วนขยายของแฟ้ม
  4. ในการขยายกล่องป้อนค้างคาว
  5. ในการแก้ไขหล่นลงเลือกSource Code (Text) แก้ไขด้วยการเข้ารหัสและคลิกAdd
  6. คลิกตกลงเพื่อบันทึกและออก

ตอนนี้เมื่อคุณเปิดไฟล์. batจากภายในVisual Studioคุณจะได้รับพร้อมท์ด้วย:

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

คุณจะต้องเจาะลึกตัวเลือกต่างๆจนกว่าคุณจะมาที่ตัวเลือกDOSในภาษาของคุณ:

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

คลิกตกลงเพื่อเสร็จสิ้นการเปิดไฟล์


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


ด้วยทั้งหมดที่อยู่ในสถานที่ที่คุณจะดีใจที่รู้ว่าตอนนี้คุณอาจจะดู , แก้ไขและบันทึกของคุณค้างคาวไฟล์ (s) จากภายในVisual Studioเพื่อให้cmd.exeไม่ช่วยให้คุณมีข้อผิดพลาดชั่วร้ายดังกล่าว:

'∩╗┐'ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอก, โปรแกรมที่ทำงานได้หรือไฟล์แบตช์


2
การแก้ไขนี้ทำงานใน VS2017 ได้อย่างสมบูรณ์แบบเช่นกัน
Greg Trevellick

1
ฉันไม่เคยคิดเรื่องนี้เลย ยังคงเป็นโซลูชันที่ถูกต้องสำหรับ VS2019
hbulens

10

เหล่านี้คือ Unicode ไบต์สั่งซื้อ Marks Cmd.exe ไม่เข้าใจพวกเขา หากคุณบันทึกไฟล์ของคุณใน Notepad ด้วยการเข้ารหัส ANSI ซึ่งจะช่วยแก้ไขปัญหาได้

ตัวอย่างเช่นฉันสร้างไฟล์แบทช์นี้:

echo Hello World

ก่อนอื่นฉันบันทึกด้วยการเข้ารหัส UTF-8

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>echo Hello World
'echo' is not recognized as an internal or external command,
operable program or batch file.

จากนั้นด้วย Unicode

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>■e
'■e' is not recognized as an internal or external command,
operable program or batch file.

และสุดท้ายกับ ANSI

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>echo Hello World
Hello World

4

ตามที่อธิบายไว้ก่อนหน้านี้อักขระนี้เป็นอักขระ Unicode BOM (Byte Order Mark) ที่ใช้เป็นลายเซ็นต์และ cmd.exe นั้นไม่รู้จัก

คุณสามารถลบได้อย่างปลอดภัยในหลาย ๆ

ฉันพบว่าทำง่ายมากดังนี้

  1. เปิดไฟล์ในNotepad ++
  2. ไปที่เมนูการเข้ารหัส
  3. เลือกตัวเลือก: เข้ารหัสเป็น UTF-8 โดยไม่มี BOM
  4. บันทึกและนั่นคือมัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.