°,±和& ²生产░,▒& ▓在这个批处理文件中?

时间:2012-12-02 02:21:40

标签: encoding batch-file cmd ascii

此代码:

   @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-Paul-Tomasi.html#c18182并在cmd窗口中生成以下输出:

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

然而,我似乎无法通过谷歌找到解释这是如何工作的解释。将其他扩展的ascii字符替换为它们的位置似乎产生“命令的语法不正确”,因此只能设法猜测这是一个黑客,通过无意的方式将这些字符交换到扩展的ascii集中的较低字符 - 设计师的技巧。

如果有人也可以建议一个好网站来了解更多关于cmd / cmd程序这样的功能,我们将不胜感激。

1 个答案:

答案 0 :(得分:4)

这是因为您的编辑器使用的是一个DOS和命令行使用的不同编码。

请参阅此处的字符176-178:

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

DOS和WIN列中的字符对由相同的数值表示,但DOS(因此命令行)和Windows(您的文本编辑器)将这些数字显示为不同的符号。

如果不清楚:您的文本文件是一系列字节(数字),其中一个字节的值为176.在DOS code page 437下,由于历史原因,它用于表示▓字形和命令行,使用与DOS相同的编码。但是,在Windows上运行的文本编辑器显然使用旧的Windows-1252编码读取文件,其中176表示°。

你可以尝试找一个支持437的编辑器,这样可以避免这种混乱。