Skip to content

Windows bat 脚本编写注意

CMD 黑窗口中文乱码(一)

  1. 使用 chcp 65001 修改当前黑窗口编码为 UTF-8;
  2. 在启动参数中增加 -Dfile.encoding=utf-8 参数。
shell
@echo off 
chcp 65001 > nul
java -Dfile.encoding=utf-8 -jar your_app.jar  
pause
  • 65001 表示 UTF-8编码。936 表示 GBK 编码。CMD 窗口默认为 GBK 编码。
  • chcp 65001 修改编码为 UTF-8。
  • chcp 936 可恢复为默认的 GBK 编码。
  • pause 防止窗口闪退。

CMD 黑窗口中文乱码(二)

记事本打开 .bat 文件,选择【文件】-【另存为】然后下面的编码选择:ANSI,然后保存即可。

切换并进入运行目录到脚本所在的目录

bash
cd /d %~dp0
# 关于 cd 的 /d 参数,在cmd中敲入cd /? ,可以看到 /d 参数的解释如下:
# 使用 /D 命令行开关,除了改变驱动器的当前目录之外,还可改变当前驱动器。

# 关于 %~dp0 的批处理命令的详细解释:
# %~dp0 “d” 为 Drive 的缩写,即为驱动器,磁盘、“p” 为Path缩写,即为路径,目录。
# 选项语法:
# ~0 - 删除任何引号("),扩充%0,
# %~d0 - 仅将%0扩充到一个驱动器号,
# %~p0 - 仅将%0扩充到一个路径。

设置 JAVA_HOME 和 Path

bash
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_251
set Path=%JAVA_HOME%\bin;%Path%

# 或者简单的方式如下:
set Path=C:\Program Files\Java\jdk1.8.0_251\bin;%Path%

# 设置 CLASSPATH
set CLASSPATH=.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;ar;lib/run.jar

# 然后脚本默认就是使用上面设置的 JAVA_HOME 来启动 jar 应用了,比如下面这样:
# java -jar vitality-admin.jar

启动 java 示例脚本

bash
rem 使用者应根据自身平台编码自行转换 防止乱码 例如 win使用gbk编码
@echo off
title=Vitality-Admin

echo  启动倒计时:
timeout /T 10 /NOBREAK

rem jar平级目录
set AppName=vitality-admin.jar

rem JVM参数
set JVM_OPTS="-Dname=%AppName% -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai -Xms1024m -Xmx4096m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"

for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
	set pid=%%a
	set image_name=%%b
)
if  defined pid (
	echo %%is running
	PAUSE
)

echo  starting……
java %JVM_OPTS% -jar %AppName%
PAUSE