KETTLE調度第三篇:Windows下調度Dos腳本編寫和遇到的一些問題解決
阿新 • • 發佈:2019-01-09
p s off ati ech 存儲 %s left 天數 mar
前言: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% 表示截取 t 的前四個長度。
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 命名參數
當作業設置了命名參數後,在腳本裏可如下調用。本例以資源庫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腳本編寫和遇到的一些問題解決