跳至主要內容

is not recognized

Sankgao约 689 字大约 2 分钟编程语言问题CMD

问题

@echo off
rem 输出连续多行不包含中文字符。
echo Hello World! 01
echo Hello World! 02

rem 输出连续多行包含中文字符。第一行以中文字符结尾,其它几行不以中文字符结尾。
echo 你好,世界! 01
echo 你好,世界! 02

rem 输出连续多行包含中文字符,且都以中文字符结尾。
echo 你好,世界!
echo 你好,世界!

执行上面 CMD 脚本后,报错日志如下:

E:\batch>test.cmd
Hello World! 01
Hello World! 02
'��世界!' is not recognized as an internal or external command,
operable program or batch file.
你好,世界! 02
'��世界!' is not recognized as an internal or external command,
operable program or batch file.
'��世界!' is not recognized as an internal or external command,
operable program or batch file.

E:\batch>

is not recognized as an internal or external command, operable program or batch file. 这是在代码编码为 65001(UTF-8)时显示的提示输出;代码编码为 936(简体中文)时显示的提示输出为 不是内部或外部命令,也不是可运行的程序或批处理文件。

原因

  • 当有连续多行包含中文字符,且都以中文字符结尾,除了最后一行外,其它几行不能以中文字符结尾
  • 当有连续多行包含中文字符,第一行以中文字符结尾,其它几行不以中文字符结尾时,第一行不能以中文字符结尾

解决方法

解决方法 1

在中文字符结尾添加至少一个空格或其它非中文字符。

rem 输出连续多行包含中文字符。第一行以中文字符结尾,其它几行不以中文字符结尾。 
echo 你好,世界! 01
echo 你好,世界! 02

rem 输出连续多行包含中文字符,且都以中文字符结尾。 
echo 你好,世界! 
echo 你好,世界!

解决方法 2

在命令中间添加空行。

rem 输出连续多行包含中文字符。第一行以中文字符结尾,其它几行不以中文字符结尾。

echo 你好,世界! 01
echo 你好,世界! 02

rem 输出连续多行包含中文字符,且都以中文字符结尾。

echo 你好,世界!

echo 你好,世界!

解决方法 3

为中文字符添加双引号("),但这种方法在输出时也会将引号输出显示。

rem "输出连续多行包含中文字符。第一行以中文字符结尾,其它几行不以中文字符结尾。"
echo 你好,世界! 01
echo 你好,世界! 02

rem "输出连续多行包含中文字符,且都以中文字符结尾。"
echo "你好,世界!"
echo "你好,世界!"