在平常开发中,经常会碰到使用定时任务按时跑批数据,或者其他定时操作的任务。下面就汇总整理BAT脚本编写常用的技巧:
第一:使用BAT命令替换文件中的字符串
@echo 修改ctl控制文件内容Insert为append 表名改为FP_FPXX
@echo off&setlocal enabledelayedexpansion
@rem 读取CB_FDKFPCGL_MX_sqlldr.ctl所有内容
for /f "eol=* tokens=*" %%i in (CB_FDKFPCGL_MX_sqlldr.ctl) do (
@rem 设置变量a为每行内容
set a=%%i
@rem 如果该行有INSERT,则将其改为APPEND
set "a=!a:INSERT=APPEND!"
@rem 把修改后的全部行存入$
echo !a!>>$)
@rem 用$的内容替换原来a.txt内容
move $ CB_FDKFPCGL_MX_sqlldr.ctl
第二:使用BAT命令操作数据SQL文件
一共分为两个部分:
一个为bat批处理文件,用于sys用户连接数据库,并用来操作数据库,这里用来导入数据;
另一个为sql文件,里面存储要执行的sql语句,这里用来删除、创建用户。
一、为了方便,先看sql文件:ReCreateUser.sql
-- 删除用户,如果没有该用户,第一次会报错
drop user oa cascade;
-- 重新创建用户oa/oa
create user oa identified oa;
-- 为oa用户指定默认表空间
alter user oa default tablespace users;
-- 为oa用户指定dba权限
grant dba to oa;
-- 提交
commit;
-- 退出
exit
二、bat文件:ImpDB.bat
@echo off
echo 连接数据库、重新创建用户
sqlplus sys/orcl as sysdba @ D:\ReCreateUser.sql
echo 导入数据
imp oa/oa@orcl full=y file=D:\db.dmp
echo 导入完成。
第三:使用BAT命令在一个BAT脚本中,调用其他A、B两个BAT脚本
@echo 开始执行导出数据操作
call exp_Oracle.bat
@echo 开始执行导入数据操作
call imp_Oracle.bat
汇总样例:
@echo off
@rem **********************************************
@rem 定时任务总调度入口
@rem 2019-03-18
@rem **********************************************
@echo off
@rem 设置路径
set EXP_PATH=%cd%
set PATH=%PATH%;%EXP_PATH%
set ctlDir=%cd%\ctl\
call exp_Oracle.bat
@echo 修改ctl控制文件内容Insert为append 表名改为FP_FPXX
@echo off&setlocal enabledelayedexpansion
@rem 读取CB_FDKFPCGL_MX_sqlldr.ctl所有内容
for /f "eol=* tokens=*" %%i in (CB_FDKFPCGL_MX_sqlldr.ctl) do (
@rem 设置变量a为每行内容
set a=%%i
@rem 如果该行有INSERT,则将其改为APPEND
set "a=!a:INSERT=APPEND!"
@rem 把修改后的全部行存入$
echo !a!>>$)
@rem 用$的内容替换原来a.txt内容
move $ CB_FDKFPCGL_MX_sqlldr.ctl
@echo 修改ctl控制文件内容Insert为append 表名改为FP_FPXX
for /f "eol=* tokens=*" %%i in (CB_FDKFPCGL_MX_sqlldr.ctl) do (
@rem 设置变量a为每行内容
set a=%%i
@rem 如果该行有CB_FDKFPCGL_MX,则将其改为FP_FPXX
set "a=!a:INTO TABLE CB_FDKFPCGL_MX=INTO TABLE FP_FPXX_BAK!"
@rem 把修改后的全部行存入$
echo !a!>>$)
@rem 用$的内容替换原来a.txt内容
move $ CB_FDKFPCGL_MX_sqlldr.ctl
@rem 读取CB_FPCGL_MX_sqlldr.ctl所有内容
for /f "eol=* tokens=*" %%i in (CB_FPCGL_MX_sqlldr.ctl) do (
@rem 设置变量a为每行内容
set a=%%i
@rem 如果该行有INSERT,则将其改为APPEND
set "a=!a:INSERT=APPEND!"
@rem 把修改后的全部行存入$
echo !a!>>$)
@rem 用$的内容替换原来CB_FPCGL_MX_sqlldr.ctl内容
move $ CB_FPCGL_MX_sqlldr.ctl
@echo 修改ctl控制文件内容Insert为append 表名改为FP_FPXX
for /f "eol=* tokens=*" %%i in (CB_FPCGL_MX_sqlldr.ctl) do (
@rem 设置变量a为每行内容
set a=%%i
@rem 如果该行有CB_FPCGL_MX,则将其改为FP_FPXX
set "a=!a:INTO TABLE CB_FPCGL_MX=INTO TABLE FP_FPXX_BAK!"
@rem 把修改后的全部行存入$
echo !a!>>$)
@rem 用$的内容替换原来a.txt内容
move $ CB_FPCGL_MX_sqlldr.ctl
@echo 开始执行导入数据操作
call imp_Oracle.bat
@echo off
pause>nul
公众号,会不定时推送一些开发中碰到的问题的解决方法,以及会分享一些开发视频。资料等。公众号里有联系方式,大家可以一起交流分享开发中遇到的问题,以及总结的经验,请大家关注一下谢谢: