当前位置:   article > 正文

【错误记录】Windows 系统 bat 脚本报错 ( Java 生成 bat 脚本乱码处理 | 输出 GB2312 字符串 | Windows 中的换行时 \r\n )_bat脚本 error

bat脚本 error





一、报错信息



使用 Java 语言生成了 Windows 系统中的 bat 批处理脚本 , 运行后出现中文乱码 ;

使用如下 Java 代码生成 bat 脚本文件 ;

public class Main {

    public static void main(String[] args) throws Exception {
        File bat = new File("cmd.bat");

        FileWriter fileWriter = new FileWriter("cmd.bat");
        fileWriter.write("del delete_file.txt\n");
        fileWriter.write("del 待删除文件.txt\n");
        fileWriter.write("pause");
        fileWriter.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

生成内容如下 :

del delete_file.txt
del 待删除文件.txt
pause
  • 1
  • 2
  • 3

执行该 bat 脚本出现如下问题 :

在这里插入图片描述

单独指令这两个命令 , 是可以执行成功的 ;

但是执行该批处理文件 , 出现乱码 ;





二、问题分析



打开该批处理文件 , 如果使用 UTF-8 编码打开 , 文件内容正常 ;
在这里插入图片描述

但是 bat 脚本是使用 ANSI 编码的 , 如果切换成 ANSI 编码 , 发现成乱码了 ;

在这里插入图片描述
这个乱码就是 bat 脚本执行的乱码 ;
在这里插入图片描述

修改程序后 , 以 GB2312 格式输出 , 使用 ANSI 编码打开 , 没有乱码 ;

在这里插入图片描述

执行时出现如下情况 , 还是乱码 ;

在这里插入图片描述

这就比较纠结 , 网上找的资料 , 显示只要是 ANSI 格式的 , 都可以执行 ;

这一次新创建一个 cmd1.bat 文件 , 并且使用记事本保存 , 另存为 ANSI 编码 , cmd1.bat 文件 ;

在这里插入图片描述

执行 cmd1.bat 脚本 , 居然没有乱码 ;

在这里插入图片描述
上二进制分析工具 , 分析这两个文件 ;

这是不可执行的 cmd.bat 的二进制数据 :

在这里插入图片描述
这是可执行的 cmd1.bat 的二进制数据 :

在这里插入图片描述
观察关键数据 , cmd1.bat 文件中 , 在 txt 后 , 多了一个字节 , 在 WIndows 系统中 , 换行时 \r\n , Java 程序中生成的是 \n 作为换行 , 这里特别注意 , 找了几个小时 ;





二、解决方案



上述 Java 程序出现 2 2 2 个问题 , 一个是 没有以 GB2312 格式输出 , 另一个是 WIndows 系统中的文本换行必须是 “\r\n” , 否则程序也无法执行 ;

修改后的程序 :

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

public class Main {

    public static void main(String[] args) throws Exception {
        File bat = new File("cmd.bat");

        OutputStreamWriter osw =new OutputStreamWriter((new FileOutputStream("cmd.bat")),"gb2312");
        osw.write("del delete_file.txt\r\n");
        osw.write("del 待删除文件.txt\r\n");
        osw.write("pause\n");
        osw.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

执行后 , 发现乱码问题解决 ;

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/76596
推荐阅读
相关标签
  

闽ICP备14008679号