欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Windows批处理常用脚本

程序员文章站 2022-04-01 21:38:19
...

       最近一个项目,由于在应用服务器上采集的数据量很大,不能实时的完成所有数据的数据库写入。所以项目组采取应用服务器采集的数据以文本文件形式存在本地,然后拷贝到数据库服务器,再执行数据库导入脚本,从而实现数据入库功能。

       整个过程如果由人工完成,将会非常耗时耗力,所以我们采用批处理脚本与JAVA小程序结合的方式,先在应用服务器将采集数据定时打包,并传送到数据库服务器;在数据库服务器端,用定时批处理程序解压数据包,并将其导入数据库中。

      本文将该应用中相关的脚本进行整理。

 

1. echo 

 

echo on       // 显示命令行
echo off      // 不显示命令行
echo          // 显示当前 echo 的状态(on or off)
echo Start    // 将"Start"字符串输出到控制台
echo Start > d:\test.txt   // 将"Start"字符串写入 text.txt 文件中,已有内容被覆盖
echo Start >> d:\test.txt  // 将"Start"字符串追加到 text.txt 文件的尾部

 

2. 注释 (rem)

 

rem Environment Variable Prerequisites  // 使用 rem 关键字进行行注释

 

3. 跳转 (goto)

 

         如果变量 JRE_HOME 不为空,则跳转至 gotJreHome 标志处执行,否则将依次执行接下来的语句。

// 使用 goto 语句实现逻辑跳转
if not "%JRE_HOME%" == "" goto gotJreHome
set "JRE_HOME=%JAVA_HOME%"

:gotJreHome
echo Got JRE Home

 

4. 变量

 

// 变量定义
set "DB_SERVER_IP=192.168.1.104"
set "WINRAR_HOME=C:\Program Files\WinRAR"  // 如果变量中有空格,则用引号引起来

// 变量获取
%WINRAR_HOME%  // 这样便可获取到 WINRAR_HOME 的值

// 环境变量,系统中配置的环境变量可以在批处理程序中获取
set "JRE_HOME=%JAVA_HOME%"  // 获取环境变量 JAVA_HOME 的值,并将其赋给变量 JRE_HOME

 

5. for 

 

// 1. 遍历文件名
for /f "delims=" %%i in ('dir %SRC_FILE_DIRS%\*.rar /b') do (
	echo %%i
)

    (1)/f : 用于处理文件和命令的输出结果

    (2)%%i : 遍历变量,在 cmd 中请使用 %i

    (3)dir %SRC_FILE_DIRS%\*.rar /b : 列出目录 %SRC_FILE_DIRS%\ 下扩展名为 .rar 的所有文件名

  

// 2. 获取环境变量 PATH 的各个值
for /f "delims=; tokens=1-24" %%a in ("%PATH%") do (
        echo %%a
        echo %%b
        echo %%c
        echo %%d
        echo %%e
) 
    (1)"delims=; tokens=1-24" :以 ";" 为分隔符,截取从第 1 个 至 第 24 个的所有字符串
    (2)%%a, %%b, %%c : 按 ASC 码加 1 方式增加依次获取第 1 个,第 2 个 ... 第 n 个变量

  

6. 程序调用 

 

// 使用 WinRAR 打包文件
set "_RUNWinRAR=C:\Program Files\WinRAR\WinRAR.exe"
"%_RUNWinRAR%" a -ep1 -o+ -inul -ibck  %ROOT_DIR%\file.war src.txt
   
   参数说明 

             a :将 src.txt 添加至 file.war 压缩文件

             -ep1 : 从名称中排除基本目录,如: d:\data\src.txt,将排除 d:\data\ 字符串,否则,压缩后的文                            件名将是 d:\data\src.txt

             -o+ : 覆盖已存在文件

             -inul : 禁用所有消息

             -ibck : 以后台模式运行

      

// 调用 osql 命令执行 sql 脚本文件
osql -S %DB_SERVER_IP% -U %DB_USER_NAME% -P %DB_PASSWORD% -d %DB_NAME% -i script.sql -o log.txt
    
    参数说明 

           -S : 数据库服务器 IP 地址

           -U : 数据库登录名

           -P : 数据库登录密码

           -d : 数据库名称

           -i  : sql脚本源文件

           -o : 日志输出文件

  

// 使用 FileBus 传输文件
set %_RUNFileBus=d:\filebus\FileBus.exe%
%_RUNFileBus% %SRC_FILE_DIR%\src.txt %DES_IP% %DES_PORT%

    (1)%SRC_FILE_DIR%\src.txt : 需要传送的文件路径

    (2)%DES_IP% : 目的机器的 IP 地址

    (3)%DES_PORT%  : 目的机器的接收端口,默认为 8807 

    (4)需在目的机器打开 filebus 程序

 

7. 文件是否存在 

 

// if exist / if not exist: 判断文件是否存在
if exist "%EXEC_HOME%\bin\exec.bat" goto okHome
if not exist "%EXEC_HOME%\bin\exec.bat" goto notOkHome