Bootstrap

windows basic语言学习笔记,批处理命令的简单使用

在这里插入图片描述

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"
)
  • 注意事项
    1. Windows 系统使用反斜杠 \
    2. 方法体用 () 括起来。
    3. mkdir 命令是 Windows 和 Linux 通用命令。
    4. 目录路径需要加上双引号。

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

;