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

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

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

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

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

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

You could try to find an editor supporting 437, it would save you from such confusions.

于 2012-12-02T10:40:59.413 回答