[BATCH]利用檔案清單搬批次搬移檔案,使用雙迴圈

  • 6240
  • 0

[BATCH]利用檔案清單搬批次搬移檔案,使用雙迴圈

現在遇到一需求,要開放SFTP提供給各家廠商傳送資料,而檔案都必需加密,

現在SFTP已經建制好了,我思考要如何將各家傳送過來的檔案歸所屬的資料匣中,

本來想簡單立用BATCH來搬移檔案就夠了,但我遇到兩個問題:

1.所面對的廠商共有十幾家,雖然可以Hot Code但假設又多一家廠商或流程有修改,

那可要改十幾次,所以我想用一個TXT檔作清單,讓BATCH讀取。

2.在實作的過程中,利用FOR來讀取檔案清單,再利用FOR迴圈來拆分參數,

但發現第二層迴圈一直失敗,一直卡關。

 

問題1比較簡單,首先先建立一個TXT檔,而內容 [序號],[公司名稱],[來縓資料匣],[目的資料匣]

image

使用 FOR /F in (檔案名稱),來讀取每一列的資料

image

 

執行結果將會讀取出每一的結果

image

 

問題2要在上述的FOR迴圈中再加一層FOR迴圈,並將每個欄位析分並存入不同變數中,

image

 

但無法得到預期的效果,原本以為在BATCH中無法使用雙迴圈

image

 

此時,又要開始拜一下Google大神看此問題是否如我所猜側,所以我參考了如下網站:

Code Study 

The Will Will Web 保哥

味味A

終於知道原來在BATCH中有所謂的「延遲環境變數」特殊模式需將此功能打開,

而在從CMD直接下SET /?,其中有說明有提到。

image

 

所以程式碼需作兩件事情,

1.在程式中加入「setlocal enabledelayedexpansion

2.將第二層迴圈中變數讀取將「%」改為「!」

3.如果要直接echo迴圈變數,要多增加一個「%」

image

 

改完之執行就可以得到我們預想要的結果。

image

 

最後加入搬移的程式碼就完成了此次的需求與搬移時產生LOG檔

image

 

利用最原始且簡單的工具即完成自動化流程,其實也不需要用的華麗的程式,又保持彈性。

不過BATCH要Debug還真的不太容易,而MicoSoft有推出另一版的命令模式PowerShell,

前些日子在MVA上看了它的介紹與說明,PowerShell比Dos功能強大許多,且又能Debug,

等公司把這一批Server汰換並使用新版的WindowsServer之後,再來將此批次檔用PowerShell改版吧。