5

このコード:

   @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

... http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/MS_DOS/A_1237-DOS-ECHO-text-to-previous-line-by-P​​aul-Tomasi.html#c18182から取得され、以下を生成しますcmdウィンドウでの出力:

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

しかし、私はこれがどのように機能するかについてグーグルを通して説明を見つけることができないようです。他の拡張ASCII文字をその場所に置き換えると、「コマンドの構文が正しくない」と思われるため、これは、意図せずに、拡張ASCIIセット内の下位文字にこれらの文字を交換するハックであると推測することしかできませんでした。 -デザイナーによるトリック。

誰かがこのようなcmd/cmdプログラムの機能についてもっと学ぶための良いウェブサイトを提案することができれば、それはありがたいです。

4

1 に答える 1

4

これは、エディタが 1 つの DOS およびコマンド ラインとは異なるエンコーディングを使用しているためです。

ここで文字 176-178 を参照してください。

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

DOS 列と WIN 列の文字ペアは同じ数値で表されますが、DOS (したがってコマンド ライン) と Windows (テキスト エディター) では、これらの数値が異なる記号として表示されます。

明確でない場合: テキスト ファイルは一連のバイト (数字) であり、これらのバイトの 1 つは値 176 を持ちます。DOSコード ページ 437では、これは ▓ グリフを表すために使用され、歴史的な理由から、コマンド ラインは同じエンコーディングを使用します。 DOSがしたように。しかし、Windows で実行されているテキスト エディターは、古いWindows-1252エンコーディング (176 は ° を意味する)を使用してファイルを読み取るようです。

437 をサポートしているエディタを探してみると、このような混乱を避けることができます。

于 2012-12-02T10:40:59.413 に答える