BAT批处理脚本结合SQL应用案例

本文是BAT(批处理脚本)结合SQL的应用,脚本结合了OSQL(可执行Transact-SQL语句 )、BCP(执行数据导入导出的工具)、BLAT(命令行发邮件的工具)。

需求介绍

通过BAT编写脚本实现源数据核对、增量数据入库、数据校验、邮件通知功能。支持按照日、周、月的方式对数据进行手动更新。

关于源数据的说明:

1    当前执行的数据库环境是SQL Server
    2    如果Day、Week、Month文件夹里没有源数据则邮件通知:无源文件
    3    如果Day、Week、Month文件夹里有源数据则1 日志文件存在?删除:创建 2 Loop表名(利用导入前后表记录差,对比源文件行数判断导入成功并邮件)
    4    如果源文件有空行,也会认定失败

脚本明细

当前演示的为日任务脚本明细,周和月的类似。

@echo off
setlocal enabledelayedexpansion
set Wk_DIR=D:\DataCollect
set Day_Flag=%date:~0,4%-%date:~5,2%-%date:~8,2%
set Week_Flag=%date:~11,2%
set Month_Flag=%date:~8,2%
set Log_File=Get_DataAns_%date:~0,4%%date:~5,2%%date:~8,2%.log
set BCPLog_File=ErrBCPLog_File_%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%-%time-~3,2%-%time:~6,2%
set Server_Name="127.0.0.1"
set Db_Name="Testing"
set User_Name="sa"
set Password="sasa" set DayTables=Devices_test,Devices_test_2
set WeekTables=Devices_test_2,Devices_test
set MonthTables=Devices_test_2,Devices_test
set EmailSendTo=liangshen@realIT.com
set EmailSendFrom=liangshen@realIT.com
set EmailSendToCc=liangshen@realIT.com
set EmailSubject=DataAns数据导入日志_%Day_Flag%
set EmailSten=大家好,我是沈亮.REM 1 Day(日任务)
if exist %Wk_DIR%\Day\%Day_Flag% (
cd  %Wk_DIR%\Day\%Day_Flag%
if exist %Log_File% (del /F /Q %Log_File%)
echo %date% >> %Wk_DIR%\Day\%Day_Flag%\%Log_File%
cd %Wk_DIR%\Day\%Day_Flag%
if exist Email.log (del /F /Q Email.log )
echo %EmailSten%如下导入的是日数据: >> Email.logecho.>> Email.logfor %%x in (%DayTables%) do ( echo 表%%x的导入情况: >> Email.logosql -n -w 2000 -S %Server_Name% -U%User_Name% -P%Password% -h-1 -d %Db_Name% -Q "SET NOCOUNT ON SELECT COUNT(1) FROM %%x" -o before.txtset /p BeforeRow=<before.txt
echo !BeforeRow! >> EmailTmp.log
del EmailTmp.log
del before.txt echo. >> %Wk_DIR%\Day\%Day_Flag%\%Log_File% & echo %%x >> %Wk_DIR%\Day\%Day_Flag%\%Log_File%BCP %Db_Name%.dbo.%%x in %Wk_DIR%\Day\%Day_Flag%\%%x.txt -f %Wk_DIR%\Fmt\%%x.Fmt>>%Wk_DIR%\Day\%Day_Flag%\%Log_File% -e %Wk_DIR%\Day\Error.log 2>>&1  -S %Server_Name% -U%User_Name% -P%Password% -E FOR %%A IN (%Wk_DIR%\Day\Error.log) DO set filesize=%%~zAif !filesize! NEQ 0 (
echo 表%%x@%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%:%time:~3,2%:%time:~6,2%.%time:~9,2% >> %Wk_DIR%\Day\BCPError.log
echo.>>%Wk_DIR%\Day\BCPError.logtype %Wk_DIR%\Day\Error.log >> %Wk_DIR%\Day\BCPError.logecho.>>%Wk_DIR%\Day\BCPError.log)del %Wk_DIR%\Day\Error.logosql -n -w 2000 -S %Server_Name% -U%User_Name% -P%Password% -h-1 -d %Db_Name% -Q "SET NOCOUNT ON SELECT COUNT(1) FROM %%x" -o after.txtset /p AfterRow=<after.txt
echo !AfterRow! >> EmailTmp.logdel EmailTmp.logdel after.txt cd %Wk_DIR%\Day\%Day_Flag%for /f "tokens=1 delims=:" %%i in ('findstr /n .* %%x.txt') do set Line=%%i
echo  !Line! >> EmailTmp.logdel EmailTmp.logset /a Diff=!AfterRow! - !BeforeRow!
if /i !Diff! NEQ !Line! (
echo    !Line!行源数据!Diff!行导入 状态:失败>> Email.log
) else  (
echo    !Line!行源数据!Diff!行导入 状态:成功>> Email.log
)
echo.>> Email.log
)echo Best Regards! >> Email.logecho Liang >> Email.logcd %Wk_DIR%blat.exe %Wk_DIR%\Day\%Day_Flag%\Email.log -server mail.realIT.com  -f %EmailSendFrom% -t %EmailSendTo%  -s "%EmailSubject%" -c %EmailSendToCc% -charset gbk
) else (cd %Wk_DIR%\Dayif exist Email.log (del /F /Q Email.log )
echo %EmailSten%>> Email.log
echo.>> Email.log
echo 没有日数据>> Email.logecho.>> Email.log
echo Best Regards! >> Email.logecho Liang >> Email.logcd %Wk_DIR%blat.exe %Wk_DIR%\Day\Email.log -server mail.realIT.com  -f %EmailSendFrom% -t %EmailSendTo%  -s "%EmailSubject%" -c %EmailSendToCc% -charset gbk)

BAT批处理脚本结合SQL应用案例相关推荐

  1. BAT批处理脚本案例--计算字符串长度

    BAT批处理脚本没有提供字符串长度计算函数,为此需要自定义实现,本例将涉及批处理脚本下述几个关键知识点: 1)call 调用,调用结果如何赋值给变量 2)字符串截取 3)goto使用 4)变量延时读取 ...

  2. bat批处理脚本语法学习

    bat批处理脚本语法学习 1.打印输出:echo 2.删除文件夹下文件:del /f /s /q 路径\*.* 3.删除文件夹(包含本层):rd /q /s 路径\ 4.创建文件夹:md 路径 5.复 ...

  3. bat批处理命令大全_DOS使用环境变量图文教程,bat批处理脚本查看调用环境变量命令...

    大家好,我是老盖,首先感谢观看本文,本篇文章做的有视频,视频讲述的比较详细,也可以看我发布的视频. 今天我们学习在DOS和BAT批处理脚本中使用环境变量,环境变量是windows定义的一个变量,它有一 ...

  4. BAT 批处理脚本教程

    BAT 批处理脚本教程 第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统 ...

  5. windows的cmd与bat批处理脚本(batch script)

    目录 序:批处理看这一篇就够了 一.前言 二.使用技巧 1.查看帮助 2.命令的执行 3.变量 4.条件语句 5.循环 6.参数 7.函数(过程调用) 8.调用外部脚本 9.命令执行结果和错误判断 1 ...

  6. 使用bat批处理脚本自动设置IP和IE代理

    在不同的网络环境间切换时需要手动修改IP和IE代理设置,较为繁琐,可以通过编写相应的bat批处理脚本自动完成配置,做到一键切换.以下是一个示例: @echo off::echo set ip...:: ...

  7. 【bat批处理脚本命令】2分钟看懂,一键主机windows系统远程连接控制阿里云等windows系统的云服务器(保姆级图文+实现代码)

    目录 1.实现效果 2.实现代码 3.使用代码新建一个bat脚本文件 总结 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 本来阿里云服务器 ...

  8. bat批处理脚本入门

    BAT 批处理脚本 教程 第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令 ...

  9. 【bat批处理脚本命令】bat脚本命令的基本使用(保姆级图文+实现代码)

    目录 1.bat脚本命令的注释 2.bat脚本命令的换行 3.bat脚本命令的if判断 总结 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 ...

最新文章

  1. 如何在多Node版本的情况下公用一个npm
  2. Android存储之SQLiteDatbase
  3. Codeforces 771C
  4. 大型网站架构系列:分布式消息队列
  5. 白话算法(6) 散列表(Hash Table)从理论到实用(中)
  6. Redis--keys的通用操作
  7. java编程规范每行代码窄字符,wiki/0xFE_编程规范.md at master · islibra/wiki · GitHub
  8. [数学][欧拉降幂定理]Exponial
  9. ThinkPHP叫号系统
  10. 程序员如何才配拥有姓名?
  11. 直线旋转动画html5,多视角3D可旋转的HTML5 Logo动画
  12. jsp九大内置对象的使用详解
  13. ZenCart facebook 登陆
  14. 【C++】pcl中的简单点云可视化
  15. pathon真的那么好用吗?
  16. mac 解压rar压缩文件
  17. 【五一创作】iSH修改hostname(主机名)【美化】【短篇技术类文章】
  18. jQuery中添加元素删除元素的方法
  19. Python-编程例题
  20. 真空压缩袋哪个牌子好

热门文章

  1. OpenCASCADE:教程概述
  2. wxWidgets:操纵杆 Joystick示例
  3. BOOST_VMD_ASSERT宏相关的测试程序
  4. boost::hana::group用法的测试程序
  5. boost::graph::isomorphism用法的测试程序
  6. boost::geometry::srs::transformation用法的测试程序
  7. VTK:可视化算法之CombustorIsosurface
  8. VTK:可视化算法之DecimateHawaii
  9. VTK:网格之WindowedSincPolyDataFilter
  10. Qt Creator在设备上预览