前言:Kettle在Windows机器上常常依赖批处理脚本来完成,本文记录使用KETTLE过程中遇到命名参数、中文压缩包解压时批处理脚本是怎么处理的。
最近接到一个数据采集工作,第一反应就是想用Kettle来实现。我的环境是Windows。
spoon中这个组件在作业的脚本里。
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%
set 设置变量值,% % 使用变量,echo 输出,rem 注释,%t:~0,4% 表示截取 t 的前四个长度。
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
目标路径不存在就创建。
if not exist "%TARGETFILEPATH%" (md %TARGETFILEPATH% ) else (echo exist %TARGETFILEPATH%)
和wmic同理,如果WinRAR.exe所在路径如D:\OFFICE\WinRAR没有配置环境变量,可全路径使用,建议配置环境变量,这样脚本适用性更强一些。更多命令详情可在WinRAR.exe所在同目录下的D:\OFFICE\WinRAR\WinRAR.chm中查看命令行模式可使用的命令。
当作业设置了命名参数后,在脚本里可如下调用。本例以资源库pdibase中test路径下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