2012-12-02 2 views
5

Dieser Code:Wie funktioniert °, ± & ² in dieser Stapeldatei ░, ▒ & produce?

@echo off 
    set /p a=Installing [<nul 
    set b=1 
    :loop 
    if %b% leq 2 set /p a=°<nul 
    if %b% gtr 4 if %b% leq 6 set /p a=±<nul 
    if %b% gtr 6 if %b% leq 8 set /p a=²<nul 
    if %b% gtr 8 if %b% leq 10 set /p a=±<nul 
    if %b% gtr 10 set /p a=°<nul 
    choice /t 1 /c y /d y>nul 
    set /a b=%b%+1 
    if %b%==13 (echo ]&goto :eof) 
    goto :loop 

... kam aus http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/MS_DOS/A_1237-DOS-ECHO-text-to-previous-line-by-Paul-Tomasi.html#c18182 und erzeugt die folgenden Ausgabe in einem cmd-Fenster:

Installing [░░▒▒▓▓▒▒░░] 

aber ich kann eine Erklärung über Google, wie diese scheinen zu finden, funktioniert. Das Ersetzen anderer erweiterter ASCII-Zeichen an ihrer Stelle scheint "Die Syntax des Befehls ist inkorrekt" zu sein, so konnte nur erraten werden, dass dies ein Hack ist, bei dem etwas gegen unbeabsichtigte Zeichen in der erweiterten ASCII-Gruppe ausgetauscht wird -von-dem-Designer-Trick.

Wenn jemand auch eine gute Website vorschlagen könnte, um mehr über die Funktionen von cmd/cmd-Programmen zu erfahren, wäre es sehr hilfreich.

+0

Konnte ti wegen [der Schriftart sein, die cmd benutzt?] (Http://stackoverflow.com/questions/1259084/what-encoding-code-page-is-cmd-exe-using) – acattle

+0

Nicht wirklich ein Antwort, aber immer noch interessant: Versuchen Sie, 'type' in Ihrer Batch-Datei von der Kommandozeile aus auszuführen, wie in' type mybatchfile.bat'. Mein Texteditor zeigt '±' und den ganzen Rest, aber der 'type' Befehl zeigt' ░' und den Rest. Wenn Sie ''' in die Batch-Datei eingeben, geben Sie als' ª' aus. Der Befehlszeileneditor 'edit' zeigt auch die Befehlszeilenzeichen, nicht die Windows-Zeichen. Vielleicht eine Font-Sache, wie Acatts Link andeutet. – user1201210

+0

@acattle - Ich habe die drei Schriftarten ausprobiert, die mir in cmd zur Verfügung standen (Raster-Fonts, die die oben genannten Ergebnisse waren; jetzt auch Consolas & Lucida Console); Consolas hatte ein Leerzeichen für °, und sowohl es als auch Lucida Console produziert den Befehl ist ein falscher Fehler für die zweite ± (ungewöhnlich). Gegeben ist es cmd und kein Textverarbeitungsprogramm (zum Beispiel) würde bezweifeln, dass es im Zeichensatz für jede Schriftart unterschiedliche Zeichen geben würde, nur ein unterschiedliches Aussehen derselben Zeichenzeichenzeichen. – user66001

Antwort

4

Das liegt daran, dass Ihr Editor eine andere Kodierung verwendet als DOS und die Befehlszeile.

Siehe Zeichen 176-178 hier:

http://academic.evergreen.edu/projects/biophysics/technotes/program/ascii_ext-pc.htm

Zeichenpaar in den Spalten DOS und WIN ist mit den gleichen numerischen Werten dargestellt, aber DOS (und damit die Befehlszeile) und Windows (Texteditor) Zeigen Sie diese Nummern als unterschiedliche Symbole an.

Falls es nicht klar ist: Ihre Textdatei besteht aus einer Reihe von Bytes (Zahlen) und eines dieser Bytes hat den Wert 176. Unter DOS code page 437 steht für ▓ Glyphe, und die Befehlszeile verwendet aus historischen Gründen die dieselbe Kodierung wie DOS. Aber Ihr Texteditor, der unter Windows läuft, liest die Datei offenbar mit der alten Windows-1252 Kodierung, wobei 176 ° bedeutet.

Sie könnten versuchen, einen Editor zu finden, der 437 unterstützt, es würde Sie vor solchen Verwirrungen bewahren.

+0

Danke @kamilk - Ich verstehe jetzt. Ein paar Follow-up-Fragen, jedoch - 1) Gibt es überhaupt zu sagen, welche Programme (wie cmd.exe und Notepad) in der Art der Codepage verwenden? 2) Ich vermute, dass Fonts an Code-Seiten gebunden sind und erklären, wie die gleiche Schriftart im Cmd-Fenster sich von der gleichen Schriftart in Notepad unterscheidet? und schließlich, 3) Irgendwelche Ideen, warum ich "Die Syntax des Befehls ist falsch", wenn er eine von denen für ≡ (die, aus Gründen, die ich nicht verstehe, kann nicht durch Alt + 240, die geben schien mir dies zu c & p in Notepad läuft auf Win7) – user66001

+0

... aber gibt mir - auf Notepad in WinXP) – user66001

+0

ATTN @kamilk - Gerne Ihre richtige Antwort als solche zu markieren, wenn Sie die zusätzlichen Fragen für meine und andere in der der Nutzen der Zukunft. – user66001