当前位置: 首页 > 知识库问答 >
问题:

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

汪庆
2023-09-19

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

::可以通过在total中调用此脚本,达到直接在当前窗口路径下打开cmd窗口的操作::这是第二行注释@echo offset srcDir=%~s1:: my script is hereecho.pause

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

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

::可以通过在total中调用此脚本,达到直接在当前窗口路径下打开cmd窗口的操作::这是第二行注释@echo offset srcDir=%~s1:: my script is hereecho.pause

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

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

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

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

求有知道的解惑。

共有2个答案

朱翔
2023-09-19

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

chcp 65001...

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

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

阎德业
2023-09-19

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

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

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

 类似资料:
  • 本文向大家介绍PowerShell单行注释、多行注释、块注释的方法,包括了PowerShell单行注释、多行注释、块注释的方法的使用技巧和注意事项,需要的朋友参考一下 PowerShell的注释符分为行注释符和块注释符。行注释符使用井号(#)引起一行;块注释符使用“<#”和 “#>”来引起一段注释。 行注释符 举例如下: 块注释符、多行注释 举例如下: 这是小编每次写脚本之前,都会定义的一段关于脚

  • 我对Spring Boot配置有问题。 我已经使用https://start.spring.io/ 我有一个问题,配置只适用于子曲库中的类: 我尝试了annotation@ComponentScan,但没有任何帮助。 你知道我能用这个做什么吗?

  • 本文向大家介绍Perl中的单行注释和多行注释语法,包括了Perl中的单行注释和多行注释语法的使用技巧和注意事项,需要的朋友参考一下 同其他大多数编程语言一样,Perl中的单行注释也是#开头,例如: 但多行注释,不同的语言有不同的注释方式,比如说: Java,C/C++: Python: Ruby: Shell: Perl: 多行注释为: 说明:第一个等号必须紧跟一个字符! 比如说:

  • 问题内容: 假设我有一个抛出某种Exception的方法。引发异常的代码位于访问外部服务的第三方库中。我有一些课程可以很好地处理外部服务,并且有很多异常处理程序可以处理潜在的问题。我遇到的问题是我可能有很多异常,但是如果有一个动作,并且可能有大量尝试/捕获块,我可能只需要执行几个动作之一。异常的类型甚至可能不相关,或者不同的方法可能会抛出相同类型的异常,但是根据抛出该异常的方法,需要采取不同的操作

  • 我正在写一个DockerFile。有没有办法在这个文件中进行注释?

  • 本文向大家介绍Java单行注释。,包括了Java单行注释。的使用技巧和注意事项,需要的朋友参考一下 //用于单行注释。 示例