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.
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.
Yanıtlar:
Komutumdan önce bu garip symbols 'sembolleri alıyorum […] tüm dosyalarım UTF-8 kullanıyordu.
Bunun iki nedeni vardır:
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.)
Metin düzenleyiciniz EF
BB
BF
tü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
@ 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:
Şimdi, bir .bat dosyasını Visual Studio içinden açtığınızda, başlangıçta aşağıdakiler istenir:
Dilinizin DOS seçeneğine gelene kadar seçenekleri incelemek isteyeceksiniz :
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.
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
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: