́╗┐ 'tidak dikenali sebagai perintah internal atau eksternal

25

Ketika mengeksekusi file tertentu (terutama batch) menggunakan PsExec saya mendapatkan simbol ́╗┐ 'aneh ini sebelum perintah saya. Pikiran awal saya adalah, bahwa saya menggunakan pengkodean yang salah, tetapi setelah memeriksa, saya menyadari bahwa semua file saya menggunakan UTF-8.

miestasmia
sumber
Mengapa tidak mengubahnya menjadi UTF-16LE saja?
Ignacio Vazquez-Abrams
Apa bedanya?
miestasmia
Perbedaannya adalah bahwa Windows biasanya tidak menggunakan UTF-8.
Ignacio Vazquez-Abrams

Jawaban:

32

Saya mendapatkan simbol ́╗┐ yang aneh ini sebelum perintah saya [...] semua file saya menggunakan UTF-8.

Ini memiliki dua penyebab:

  1. cmd.exe tidak mendukung UTF-8. Itu selalu menggunakan salah satu pengkodean byte tunggal yang sering disebut "OEM" - cp437, cp775, dan sebagainya, tergantung pada pengaturan regional sistem.

    (Saya berharap untuk mendukung UTF-16 juga, tetapi ternyata tidak; bahkan jika saya menambahkan BOM UTF-16.)

  2. Editor teks Anda menambahkan "tanda urutan byte" (byte EF BB BF) UTF-8 ke awal semua file UTF-8.

    Ketika cmd.exe membaca skrip Anda, ia tidak tahu apa yang harus dilakukan dengan tanda - ia melihat BOM sebagai tiga karakter cp437 biasa,, dan mencoba menggunakannya sebagai bagian dari nama perintah.

Konfigurasikan editor Anda untuk berhenti menambahkan BOM ke file yang disandikan UTF-8. (Itu hanya masuk akal di UTF-16, dan sangat tidak berguna di UTF-8.)

Apakah mengkompilasi file batch menjadi exe memecahkan masalah?

uh

apa

pengguna1686
sumber
3
Saya tidak akan mengatakan BOM "sangat tidak berguna" di UTF-8; meskipun mereka dalam kasus khusus ini. Banyak aplikasi menggunakannya untuk menentukan teks sebenarnya adalah UTF-8 dan bukan pengkodean lain.
Dour High Arch
18

Untuk menjawab @ dsolimano lebih lanjut , jika Anda secara khusus menggunakan Visual Studio , dan dalam kasus saya ini 2013 , saya memperbaikinya dengan melakukan hal berikut:

  1. Buka Visual Studio .
  2. Klik Alat > Opsi .
  3. Klik Editor Teks > Ekstensi File .
  4. Di kotak Extension , masukkan bat .
  5. Di drop-down Editor , pilih Editor Kode Sumber (Teks) Dengan Pengodean dan klik Tambah .
  6. Klik OK untuk menyimpan dan keluar.

Sekarang, ketika Anda membuka file .bat dari dalam Visual Studio , Anda awalnya akan diminta dengan:

masukkan deskripsi gambar di sini

Anda akan ingin menelusuri opsi sampai Anda datang ke opsi DOS bahasa Anda:

masukkan deskripsi gambar di sini

Klik OK untuk menyelesaikan membuka file.


Ok, meskipun seharusnya sudah cukup jelas pada saat ini, jika Anda dapat melihat karakter di awal file Anda, sebaiknya Anda menghapusnya dan menyimpan file, sekarang dengan pengkodean yang benar. Inilah yang mencegah Anda diminta lagi di lain waktu.


Dengan semua itu di tempat, Anda akan senang mengetahui bahwa Anda sekarang dapat melihat , mengedit , dan menyimpan file .bat Anda dari dalam Visual Studio sehingga cmd.exe tidak lagi memberi Anda kesalahan keji yang disebutkan sebelumnya:

'' tidak dikenali sebagai perintah internal atau eksternal, program yang dapat dijalankan, atau file batch.

Code Maverick
sumber
2
Perbaikan ini juga bekerja di VS2017
Greg Trevellick
Saya tidak akan pernah menebak ini. Masih solusi yang valid untuk VS2019.
hbulens
10

Itu adalah Tanda Orde Unicode Byte . Cmd.exe tidak memahaminya. Jika Anda menyimpan kembali file Anda di Notepad dengan pengkodean ANSI, itu akan memperbaiki masalah.

Misalnya, saya membuat file batch ini:

echo Hello World

Pertama saya simpan dengan pengkodean 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.

Kemudian dengan 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.

Dan akhirnya dengan ANSI

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

C:\Users\DSolimano\Desktop\junk>echo Hello World
Hello World
dsolimano
sumber
4

Seperti yang dijelaskan sebelumnya, karakter ini adalah karakter unicode BOM (Byte Order Mark) yang digunakan sebagai tanda tangan dan cmd.exe tidak dikenali.

Anda dapat menghapusnya dengan aman dengan berbagai cara.

Saya menemukan sangat mudah dilakukan sebagai berikut:

  1. buka file di Notepad ++
  2. pergi ke menu Encoding
  3. centang opsi: Encode di UTF-8 tanpa BOM
  4. Simpan, dan hanya itu.
Sabri
sumber