́╗┐ 'dahili veya harici komut olarak tanınmıyor


25

PsExec kullanarak belirli dosyaları (özellikle toplu olarak) yürütürken komutumdan önce bu garip symbols 'sembolleri alıyorum. İlk düşüncem yanlış kodlama kullandığımdı, ancak kontrol ettikten sonra tüm dosyalarımın UTF-8 kullandığını fark ettim.


Bunları neden UTF-16LE'ye dönüştürmüyorsunuz?
Ignacio Vazquez-Abrams

Fark ne?
miestasmia

Fark, Windows'un genellikle UTF-8 kullanmamasıdır.
Ignacio Vazquez-Abrams

Yanıtlar:


32

Komutumdan önce bu garip symbols 'sembolleri alıyorum […] tüm dosyalarım UTF-8 kullanıyordu.

Bunun iki nedeni vardır:

  1. cmd.exe , UTF-8'i desteklemez. Her zaman sistemin bölgesel ayarlarına bağlı olarak, genellikle "OEM" olarak adlandırılan tek baytlık kodlamalardan birini kullanır - cp437, cp775 vb.

    (UTF-16'yı da desteklemesini bekledim, ancak görünüşe göre değil; UTF-16 BOM'u eklesem bile.)

  2. Metin düzenleyiciniz EF BB BFtüm UTF-8 dosyalarının başına bir UTF-8 "bayt sırası işareti" (bayt ) ekliyor .

    Ne zaman cmd.exe komut dosyası okur, bu işareti ile ne bilmiyor - bu üç sıradan cp437 karakterler gibi malzeme listesini görür ve komut adının bir parçası olarak bunları kullanmak için girişimleri.

Düzenleyicinizi, Malzeme Listesini UTF-8 kodlu dosyalara eklemeyi durduracak şekilde yapılandırın. (Sadece UTF-16'da anlamlıdır ve UTF-8'de çok işe yaramaz.)

Toplu dosyaları bir exe'ye derlemek sorunu çözer mi?

ah

ne


3
BOM'ların UTF-8'de "çok yararsız" olduğunu söyleyemem; ancak bu durumdalar. Birçok uygulama, metni aslında başka bir kodlama değil UTF-8 olduğunu belirlemek için kullanır.
Dour Yüksek Kemeri

19

@ Dsolimano'nun cevabını daha da ileriye taşımak için , özellikle Visual Studio kullanıyorsanız ve benim durumumda 2013 ise , aşağıdakileri yaparak düzelttim:

  1. Visual Studio'yu açın .
  2. Araçlar > Seçenekler'i tıklayın .
  3. Metin Düzenleyici > Dosya Uzantısı'nı tıklayın .
  4. In Uzatma kutusuna girmek sopayı .
  5. Gelen Editör seçin açılan Kaynak Kodu (Metin) Editör ile Kodlama ve tıklayın ekleyin .
  6. Kaydetmek ve çıkmak için Tamam'ı tıklayın .

Şimdi, bir .bat dosyasını Visual Studio içinden açtığınızda, başlangıçta aşağıdakiler istenir:

resim açıklamasını buraya girin

Dilinizin DOS seçeneğine gelene kadar seçenekleri incelemek isteyeceksiniz :

resim açıklamasını buraya girin

Dosyayı açmayı tamamlamak için Tamam'ı tıklayın .


Tamam, bu noktada oldukça açık olsa da ∩╗┐, dosyanızın başında karakterleri görebiliyorsanız , şimdi doğru kodlamayla, onları kaldırmanız ve kaydetmeniz sizin için iyi olur. Bir dahaki sefere tekrar istenmesini engelleyen budur.


Tüm bunlar yerinde olduğunda, cmd.exe'nin artık size yukarıda belirtilen büyük hatası vermesini önlemek için .bat dosyalarınızı Visual Studio içinden görüntüleyebilir , düzenleyebilir ve kaydedebileceğinizi bilmekten memnuniyet duyarız :

'∩╗┐' dahili veya harici bir komut, çalıştırılabilir program veya toplu iş dosyası olarak tanınmıyor.


2
Bu düzeltme VS2017'de de mükemmel çalışıyor
Greg Trevellick

1
Bunu asla tahmin edemezdim. VS2019 için hala geçerli bir çözüm.
19:26 hbulens

10

Bunlar Unicode Bayt Sipariş İşaretleridir . Cmd.exe onları anlamıyor. Dosyalarınızı ANSI kodlamalı Not Defteri'ne kaydederseniz, bu sorunu çözmelidir.

Örneğin, bu toplu iş dosyasını oluşturdum:

echo Hello World

Önce UTF-8 kodlamasıyla kaydediyorum

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.

Sonra Unicode ile

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.

Ve son olarak ANSI ile

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

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

4

Daha önce açıklandığı gibi, bu karakter, imza olarak kullanılan unicode karakter BOM (Bayt Sırası İşareti) ve cmd.exe'nin tanımadığı.

Birçok yönden güvenle silebilirsiniz.

Aşağıdaki gibi yapmak çok kolay buldum:

  1. dosyayı Notepad ++ ile açın
  2. Kodlama menüsüne gidin
  3. seçeneği işaretleyin: BOM olmadan UTF-8 kodlama
  4. Kurtarın, hepsi bu.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.