首页 > Windows开发 > 详细

KETTLE调度第三篇:Windows下调度Dos脚本编写和遇到的一些问题解决

时间:2019-01-09 19:18:30      阅读:243      评论:0      收藏:0      [点我收藏+]

  前言:Kettle在Windows机器上常常依赖批处理脚本来完成,本文记录使用KETTLE过程中遇到命名参数、中文压缩包解压时批处理脚本是怎么处理的。

 

1、中文压缩包解压

  最近接到一个数据采集工作,第一反应就是想用Kettle来实现。我的环境是Windows。

  • 我的大致需求是: 周期性从SFTP下载压缩包解析文件内容处理后入库。
  • 过程中遇到问题: zip压缩包文件名为中文,在使用文本文件读取时,会出现乱码或者zip读取不了等问题。
  • 一个解决方案是: 使用一个shell脚本组件,利用windows机器上的WinRAR来解压文件。

1.1 shell脚本

  spoon中这个组件在作业的脚本里。

技术分享图片

 

1.2 批处理脚本

 1 @echo off
 2 rem C:\Windows\System32\wbem\wmic 根据实际情况配置
 3 for /f "tokens=2 delims==" %%a in (‘C:\Windows\System32\wbem\wmic path win32_operatingsystem get LocalDateTime /value‘) do (
 4   set t=%%a
 5 )
 6 rem 获取日期,如:2019090118
 7 set YYYYMMDDHH=%t:~0,4%%t:~4,2%%t:~6,2%%t:~8,2%
 8 
 9 rem --------------------SETVAR BEGIN-----------------
10 rem 目标文件夹
11 set TARGETFILEPATH=%YYYYMMDDHH%
12 echo %TARGETFILEPATH%
13 
14 rem 压缩包完整路径,如当前目录下以_result.zip结尾的zip文件
15 set SOURCEZIPFILE=%TARGETFILEPATH%*_result.zip
16 echo %SOURCEZIPFILE%
17 rem --------------------SETVAR EDD--------------------
18 
19 if not exist "%TARGETFILEPATH%" (md %TARGETFILEPATH% ) else (echo exist %TARGETFILEPATH%)
20 
21 rem D:\OFFICE\WinRAR\WinRAR.exe为WinRAR的程序路径,可根据实际情况配置
22 "D:\OFFICE\WinRAR\WinRAR.exe" e %SOURCEZIPFILE%  %TARGETFILEPATH%

  

1.3 说明

  set 设置变量值,% % 使用变量,echo 输出,rem 注释,%t:~0,4% 表示截取 的前四个长度。

  1.3.1 WMIC获取时间

   WMIC是一个强大的命令行工具。第一次执行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符。在WMIC命令行提示符上,命令以交互的方式执行。

   如果WMIC所在路径未配置环境变量,可全路径使用,如本例中获取当前时间(yyyyMMddHH):

C:\Windows\System32\wbem\wmic path win32_operatingsystem get LocalDateTime /value

  在cmd窗口执行一下语句,结果如下:

技术分享图片

  

  dos获取时间的方法很多,常用的一种:

echo %date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%

技术分享图片

  

  这种方式的问题在于,当月份、天数或者小时数不是两位数的时候有可能会得到空格。以下是防止问题出现的脚本:

 1 @echo off
 2 setlocal enabledelayedexpansion 
 3 echo path
 4 rem ********************************************************************************
 5 set YYYYMMDD=%date:~0,4%-%date:~5,2%-%date:~8,2%
 6 set HH=%time:~0,2%
 7 
 8 rem 去空格
 9 :intercept_left
10 @if "%YYYYMMDD:~0,1%"==" " set "YYYYMMDD=%YYYYMMDD:~1%"&goto intercept_left
11 :intercept_right
12 @if "%YYYYMMDD:~-1%"==" " set "YYYYMMDD=%YYYYMMDD:~0,-1%"&goto intercept_right
13 :intercept_left
14 @if "%HH:~0,1%"==" " set "HH=%HH:~1%"&goto intercept_left
15 :intercept_right
16 @if "%HH:~-1%"==" " set "HH=%HH:~0,-1%"&goto intercept_right
17 
18 set YYYYMMDDHH=%YYYYMMDD%%HH%
19 
20 rem ********************************************************************************
21 
22 rem ---------------------以上:获取时间参数 yyyyMMddHH

 

  1.3.2 检查路径

  目标路径不存在就创建。

if not exist "%TARGETFILEPATH%" (md %TARGETFILEPATH% ) else (echo exist %TARGETFILEPATH%)

 

  1.3.3 WinRAR解压压缩包

  和wmic同理,如果WinRAR.exe所在路径如D:\OFFICE\WinRAR有配置环境变量,可全路径使用,建议配置环境变量,这样脚本适用性更强一些。更多命令详情可在WinRAR.exe所在同目录下的D:\OFFICE\WinRAR\WinRAR.chm中查看命令行模式可使用的命令。

技术分享图片

 

2 命名参数

  当作业设置了命名参数后,在脚本里可如下调用。本例以资源库pdibasetest路径下test.kjb的作业为例,该作业中参数名称为PDATE

 

 1 @echo off
 2 rem **********************************SetVAR***************************************************************************
 3 set KettlePath=%KETTLE_HOME%\Kitchen.bat
 4 set KettleBase=pdibase
 5 rem 作业的路径
 6 set JobPath==test//test
 7 rem 日志存储,如当前目录下
 8 set LogPath=%cd%
 9 rem ******************************************************************************************************************
10 %KettlePath% -rep %KettleBase% -user admin -pass admin -job %JobPath% -param:"PDATE=20190109" > %LogPath%\log.log
11 rem ******************************************************************************************************************

 

KETTLE调度第三篇:Windows下调度Dos脚本编写和遇到的一些问题解决

原文:https://www.cnblogs.com/missfox18/p/7553524.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!