2016-10-18 75 views
6

SuperUser üzerinde aşağıdaki toplu iş koduyla karşılaştım, bunun amacı bir klasörün simgesini program aracılığıyla değiştirmek. Bir "code page", 1252 tekabül denilen bir şey ile ilgilidirBu toplu iş satırı kodları nedir?

CHCP 1252 >NUL 
CMD.EXE /D /A /C (SET/P=ÿþ)<NUL > desktop.ini 2>NUL 
CMD.EXE /D /U /C TYPE desktop.txt >> desktop.ini 

SS64 bana chcp 1252 söyler:

CD "%userprofile%\desktop" 
MKDIR "TEST FOLDER" 
ATTRIB +s "TEST FOLDER" 
CD "TEST FOLDER" 
COPY /Y "%userprofile%\desktop\image.ico" "./image.ico" 
ECHO [.ShellClassInfo] >> desktop.txt 
ECHO ConfirmFileOp=0 >> desktop.txt 
ECHO NoSharing=1 >> desktop.txt 
ECHO IconFile=image.ico >> desktop.txt 
ECHO IconIndex=0 >> desktop.txt 
ECHO InfoTip= >> desktop.txt 
CHCP 1252 >NUL 
CMD.EXE /D /A /C (SET/P=ÿþ)<NUL > desktop.ini 2>NUL 
CMD.EXE /D /U /C TYPE desktop.txt >> desktop.ini 
DEL /F /Q desktop.txt 
ATTRIB +S +H desktop.ini image.ico 

kolayca yeterince senaryonun dinlenmeye ama sorun anlayarak bu üç satır yaşıyorum "Batı Avrupalı ​​Latin", bu yüzden benim en iyi tahminin bu, senaryoyu Latin karakter kümesini kullanmaya zorlamasıdır. İkinci iki çizgi, CMD'nin örneklerini açar; SS64, ilkdeki/A anahtarının ANSI'de çıktı aldığını belirtirken,/U ikinci saniyede Unicode çıkarır. Bu benim tahmin edebileceğim kadarıyla, ve bu üç çizginin her büyük kısmından birileri geçip bana ne yaptıklarını söylese çok memnun olurum.

Teşekkürler! Kısacası

+0

chcp, klavyenizin kod sayfasını değiştirir: [daha fazla bilgi edinin] (http://www.computerhope.com/chcphlp.htm) ve cmd satırları, desktop.ini dosyanızı değiştirir – mtizziani

+3

@mtizziani: Kod sayfaları ve klavyeler tamamen ilgisizdir . 'CHCP', STDIN’den gelen verilerin yorumlanmasını ve çıktının konsolu STDOUT olarak değiştirir. – IInspectable

cevap

6

, kod [1] :

  • olan içerik sonunda desktop.ini olacak bir geçicidesktop.txt dosya oluşturur, ancak bir farklı kodlama ile. Söz konusu

  • komutları sonra (en-US sistemde örneğin CP-437) geçerli konsol-kod sayfası ile kodlanmış dosyayı desktop.txt dönüştürmek (kültür-bağımsız) dosyası Dosya olan kodlanmış dosyayı desktop.ini, UTF-16 LE için Explorer, klasörün ekranını elinde kontrol etmek için kullanır.

  • o bu dosyalar verildi (işaretlenmiş olmalıdır nasıl çünkü system (+S) ve hidden (+H), desktop.ini dosyası ve ilgili ikon dosyası, image.ico hem niteliklerini sadece içeren ekran kontrol ettiğini belirler klasörü ve veri dosyalarını kendileri değil).

Özellikle, ilgilenilen 3 satır aşağıdakileri yapın: Windows-1252 kod sayfasına

  • CHCP 1252 >NUL (sessizce) değişir. ; UTF-16 LE kodlanmış dosyaları tanımlamak için kullanılan BOM (bayt sırası işareti) 'dir bayt 0xFF 0xFE, tutarındaki bir Windows-1252 kodlanmış dize olarak yorumlanır ÿþ, -

  • CMD.EXE /D /A /C (SET/P=ÿþ)<NUL > desktop.ini 2>NUL etkili bir çıkış dosyasına desktop.ini dize ÿþ gönderir diğer bir deyişle: bu dizgiyi desktop.ini dosyasına göndermek bir UTF-16 LE kodlu dosya olarak işaretler.Şimdi ayarlı -

    • /D basitçe "ANSI" varsayılan kod sayfası atıfta çıktı "ANSI" kodlanmış dizeleri, cmd.exe söyler kayıt
    • /A aracılığıyla tanımlanabilir olabilecek, otomatik olarak çalıştırmak işlevselliği bastırır Aşağıdaki argümanların bir komut olarak çalıştırılması gerektiği ve komut sonlandıktan sonra cmd.exe'un çıkması gerektiği anlamına gelir.
  • CMD.EXE /D /U /C TYPE desktop.txt >> desktop.ini sonra desktop.ini kodlanmış UTF-16 LE geçici dosya desktop.txt dönüşümünü tamamlar "Unicode" (UTF-16 LE) kodlaması (/U sayesinde) kullanılarak, desktop.ini önceden oluşturulan desktop.txt dosyasının içeriğini ekler (bundan sonra desktop.txt kaldırılmıştır).


[1]
Bu cevap yorumladığı mutlaka özellikle Windows'un 10'da, çalışır anlamına gelmez kod adlı niyet; örneğin UTF-16 LE kodlanmış dosyaları oluşturmak için ihtiyaç gelince IconResource=C:\Users\jdoe\Desktop\image.ico,0

: Örneğin, etkileşimli bir simge atama resim dosyası ve onun özgül iç kaynağın indeksini birleştiren farklı, tek özelliğini ayarlamak gibi görünüyor : Bu, bir simge atamak için Dosya Gezgini'ni kullandığınızda Windows'un kendisinin sıkı bir gereklilik olmadığını, görünen eski - tek bayt kodlamada (ör. Windows-1252) dosyaları oluşturur. Bu,gibi bir kültür bağımsız kodlamasını kullanarak, en azından prensip olarak en sağlam yaklaşımdır.
Ancak, desktop.ini'a yazdığınız tüm değerler ASCII karakterleri (7-bit aralığı) ise, çıkışını doğrudan desktop.ini'a bağlamak güvenlidir. Klasör ekran niteliklerini belirlemek için bir toplu dosyası kullanarak gününün sonunda

, aslında ters mühendislik resmi API'ler dayandığını göz önüne alındığında, bir kırılgan yaklaşımdır - değişebilir hangi.

Daha genel olarak, toplu iş dosyalarını yapmak için kullanmak, bu günlerden en iyi şekilde kaçınılmalıdır - bunun yerine PowerShell'i kullanın.

+0

Detay için teşekkürler. İlk önce geçici bir metin dosyası oluşturup, bunu "UTF-16" kodlamasına dönüştürmek için bir amaç var mı? Gerçekten kıvrımlı gibi görünüyor. Herhangi biri basitleştirilebilir mi? .ini'nin UTF-16'da kodlanması gerekiyor mu? Doğrudan dosya oluşturmamanız ve 'system' ve' hidden' özniteliklerini eklemeniz mümkün değil mi? – Hashim

+0

@Hashim: Lütfen güncellemeye bakın. Korkarım ki bu tavşan deliğinden aşağıya doğru gitmekten vazgeçiyorum ... – mklement0

+0

Haha, bu yeterince adil, çok kapsamlı bir cevap. Hala daha fazla sorularım var ve muhtemelen cevaplandıktan sonra daha fazlası var - bu, her bir cevabın benim için 2 soru daha ortaya çıkardığı, büyük resminde bir topraklama eksikliğinden dolayı yardım etmediği alanlardan biri gibi görünüyor. soruların tavşan delikleri kaybolmak kolay. Çok teşekkürler. – Hashim