[BATCH]利用檔案清單搬批次搬移檔案,使用雙迴圈
現在遇到一需求,要開放SFTP提供給各家廠商傳送資料,而檔案都必需加密,
現在SFTP已經建制好了,我思考要如何將各家傳送過來的檔案歸所屬的資料匣中,
本來想簡單立用BATCH來搬移檔案就夠了,但我遇到兩個問題:
1.所面對的廠商共有十幾家,雖然可以Hot Code但假設又多一家廠商或流程有修改,
那可要改十幾次,所以我想用一個TXT檔作清單,讓BATCH讀取。
2.在實作的過程中,利用FOR來讀取檔案清單,再利用FOR迴圈來拆分參數,
但發現第二層迴圈一直失敗,一直卡關。
問題1比較簡單,首先先建立一個TXT檔,而內容 [序號],[公司名稱],[來縓資料匣],[目的資料匣]
使用 FOR /F in (檔案名稱),來讀取每一列的資料
執行結果將會讀取出每一的結果
問題2要在上述的FOR迴圈中再加一層FOR迴圈,並將每個欄位析分並存入不同變數中,
但無法得到預期的效果,原本以為在BATCH中無法使用雙迴圈
此時,又要開始拜一下Google大神看此問題是否如我所猜側,所以我參考了如下網站:
●Code Study
●The Will Will Web 保哥
●味味A
終於知道原來在BATCH中有所謂的「延遲環境變數」特殊模式需將此功能打開,
而在從CMD直接下SET /?,其中有說明有提到。
所以程式碼需作兩件事情,
1.在程式中加入「setlocal enabledelayedexpansion」
2.將第二層迴圈中變數讀取將「%」改為「!」
3.如果要直接echo迴圈變數,要多增加一個「%」
改完之執行就可以得到我們預想要的結果。
最後加入搬移的程式碼就完成了此次的需求與搬移時產生LOG檔
利用最原始且簡單的工具即完成自動化流程,其實也不需要用的華麗的程式,又保持彈性。
不過BATCH要Debug還真的不太容易,而MicoSoft有推出另一版的命令模式PowerShell,
前些日子在MVA上看了它的介紹與說明,PowerShell比Dos功能強大許多,且又能Debug,
等公司把這一批Server汰換並使用新版的WindowsServer之後,再來將此批次檔用PowerShell改版吧。