BAT学习笔记
前言
Windows 命令行中对参数的大小写不敏感,因此
/D
和/d
的效果完全一致。
1. 代码1:创建目录并复制文件
源代码:
@echo off
REM 创建目标目录,如果不存在
if not exist "C:\h2" (
mkdir "C:\h2"
)
REM 复制当前目录下的所有文件和子目录到 C:\h2\
xcopy /E /I * "C:\h2\"
echo All files and directories have been copied to C:\h2\
pause
说明:
@echo off
:关闭命令行回显,命令执行时不显示命令本身。
1.1 判断目录是否存在并创建
if not exist "C:\h2" (
mkdir "C:\h2"
)
- 注意事项:
- Windows 系统使用反斜杠
\
。 - 方法体用
()
括起来。 mkdir
命令是 Windows 和 Linux 通用命令。- 目录路径需要加上双引号。
- Windows 系统使用反斜杠
1.2 复制当前目录下的所有文件和目录
xcopy /E /I * "C:\h2\"
xcopy
:可以批量复制文件和目录。/E
:复制所有子目录及文件,包括空的子目录。/I
:若目标目录不存在则自动创建。*
:表示复制当前目录下的所有文件和子目录。/D
:增量备份,若有相同文件则覆盖旧文件。/Q
:静默模式,不显示复制过程中的文件名。
1.3 其他命令说明
echo
:输出指定的字符串,相当于打印。pause
:暂停脚本执行,等待用户输入。
2. 代码2:切换目录并启动服务
@echo off
cd /d C:\h2
echo Starting template...
REM 切换到目标目录
cd C:\h2\deploy\node\node-fabric
REM 执行 npm run dev
npm run dev
echo All services started.
pause
说明:
cd
:进入目录,但不支持跨盘符跳转。cd /d
:可以同时切换驱动器和目录。npm run dev
:执行开发环境中的npm
脚本。
拓展:
cd /d %~dp0
:此命令可以切换回批处理文件的初始目录。
3. 代码3:从文件读取配置参数
配置文件内容:h2.conf
源代码:
REM 将h2.conf当成一个变量
set CONFIG_FILE=h2.conf
REM 输出当前工作目录
echo Current Directory: %cd%
REM 检查配置文件是否存在
if not exist "%CONFIG_FILE%" (
echo Error: Configuration file not found at "%CONFIG_FILE%"
pause
exit /b
)
REM 从配置文件中读取设置
for /f "tokens=1,* delims=" %%a in (%CONFIG_FILE%) do (
set %%a
)
echo Starting Nginx...
start /B C:\h2\nginx\nginx-1.27.0\nginx.exe
echo Starting Redis...
start /B C:\h2\redis\Redis-x64-3.0.504\redis-server.exe
echo Starting Java application with dynamic database configuration...
start /B java -jar C:\h2\deploy\app.jar --spring.datasource.url=%SPRING_DATASOURCE_URL% --spring.datasource.username=%SPRING_DATASOURCE_USERNAME% --spring.datasource.password=%SPRING_DATASOURCE_PASSWORD%
说明:
%cd%
:表示当前目录。%CONFIG_FILE%
:表示h2.conf
文件路径。
检查文件是否存在:
if not exist "%CONFIG_FILE%" (
echo Error: Configuration file not found at "%CONFIG_FILE%"
pause
exit /b 1
)
pause
:命令暂停,等待用户输入。exit /b 1
:退出当前脚本或子程序,返回状态码 1,通常表示执行失败。
3.1 从配置文件读取设置
for /f "tokens=1,* delims=" %%a in (%CONFIG_FILE%) do (
set %%a
)
for /f
:用于循环读取文件内容,解析每一行。"tokens=1,* delims="
:tokens=1,*
指定将行分为多个部分,第一个部分是tokens=1
,其余部分为*
,delims=
表示没有分隔符,整个行被当做一个整体处理。
for
循环语法:
for /f " " [] in () do
(
xxx
)
3.2 启动程序
start /B C:\h2\nginx\nginx-1.27.0\nginx.exe
start
:用于在新的命令窗口中启动程序。/B
:表示在当前窗口中启动程序,而不是创建新的命令窗口,适用于后台运行程序。
拓展:日志记录
你可以将 Nginx 的输出重定向到日志文件,以便后续检查:
start /B C:\h2\nginx\nginx-1.27.0\nginx.exe > C:\h2\nginx\nginx.log 2>&1