bat脚本,使用中文进行注释,连续注释现行,运行时就乱码,什么原因?

如题,我有一个bat脚本,这个脚本的内容如下:

::可以通过在total中调用此脚本,达到直接在当前窗口路径下打开cmd窗口的操作
::这是第二行注释

@echo off
set srcDir=%~s1

:: my script is here

echo.
pause

如👆,这个脚本开始位置有连续现行注释,这个脚本在双击运行时,或者在cmd窗口调用时,会出现如下提示:
image.png

但如果我把开头的两行注释中间在插入一个空行,改成如下样子:

::可以通过在total中调用此脚本,达到直接在当前窗口路径下打开cmd窗口的操作

::这是第二行注释

@echo off
set srcDir=%~s1

:: my script is here

echo.
pause

如👆的脚本再运行时,就正常了,如👇。
image.png
我尝试也发现,如果把第一行的注释后面加一个空格,也可以让程序正常(消除乱码)

好头大啊,为什么注释不能放一起,要隔开放?

我的bat文档以utf8编码保存的,如👇:
image.png

我的cmd窗口页面是 65001 和编码,如👇:
image.png

求有知道的解惑。

阅读 2.4k
avatarAI BotBETA

这个问题的原因是Windows的批处理脚本在解析注释时,如果发现一个换行符,就会停止注释当前行的内容,并开始注释下一行的内容。所以,如果你在注释中间插入一个换行符,批处理就会认为你取消了之前的注释,开始注释下一行。

然而,在批处理中,注释符号 :: 后面不能直接跟空格,否则批处理会认为你取消了之前的注释,开始注释下一行。所以,如果你想让批处理认为你取消了之前的注释,并在当前行继续注释,你可以使用 :: 符号后面跟一个空格的方式。

此外,Windows的批处理脚本默认使用的是 GBK 编码,如果你保存的文件是 UTF-8 编码,可能会导致在某些情况下出现乱码问题。建议使用 UTF-8 编码保存文件,或者在运行批处理脚本时指定正确的编码格式。

1 个回答

第一种方法
在脚本中设置编码为utf-8

chcp 65001
...

使用编辑器 将换行符设置为LF

第二种:
不改代码,也不用改换行符, 将bat文件编码设置为gb2312