Option Explicit ' 強制顯式聲明變數。
'********************************************************************
'* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'* CuteFTP Pro Script
'* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'*
'* 作者:張博
'*
'CuteFTP指令碼(VBScript),上傳到多個伺服器
'必須首先安裝CuteFTP軟體的較新版本(早期版本存在嚴重BUG,6.0版沒有問題)
'運行指令碼時可能需要首先關閉CuteFTP視窗(某些版本有此問題)
'需要配置的內容:
'變數appname 應用的名字,指令碼執行過程中會顯示
'變數LocalDir 用作中轉的本地絕對路徑,若不存在會自動建立
'數組RemoteInfo 目標伺服器的資訊,包括網域名稱(IP)、使用者、口令、基本路徑
'對象MySite MySite2 的各項屬性,串連源FTP和目標FTP的CuteFTP對象,需要配置網站網域名稱或IP、使用者名稱、口令
'數組JobInfo 要傳輸的檔案的相對路徑和檔案名稱
' 相對路徑可以為""或多級目錄"dir1/dir2"
' 檔案名稱可以帶萬用字元,帶萬用字元可能會連子目錄一起操作,UNIX機要區分大小寫
'執行時第一次提示任務名稱,第二次提示要執行的任務(此時可以取消任務),確定後實際執行任務,最後提示任務完成
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'通用函數
'改變本地工作路徑
Function lChangeDir(varTE,vardir)
If ""=vardir Then Exit Function
If (Not (varTE.LocalExists(vardir))) Then
varTE.CreateLocalFolder vardir
End If
varTE.LocalFolder = vardir
End Function
'改變遠程工作路徑
Function rChangeDir(varTE,vardir)
Dim b
If ""=vardir Then Exit Function
b = varTE.RemoteExists(vardir)
If (Not Cbool(b)) Then
varTE.CreateRemoteFolder vardir
End If
varTE.RemoteFolder = vardir
End Function
'同時改變本地和遠程工作路徑
Function lrChangeDir(varTE,lbasedir,rbasedir,lrdir)
lChangeDir varTE , lbasedir
lChangeDir varTE , lrdir
'varTE.RemoteCommand "CD"
rChangeDir varTE , rbasedir
rChangeDir varTE , lrdir
End Function
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'屬於特定應用的函數
Function AddRemoteInfo(infoarray,host,login,pass,basedir)
if infoarray(0,0) >= UBound(infoarray) then
MsgBox "AddRemoteInfo : array fulled"
Quit 1
End If
infoarray(0,0) = infoarray(0,0) + 1
infoarray(infoarray(0,0),0)=host
infoarray(infoarray(0,0),1)=login
infoarray(infoarray(0,0),2)=pass
infoarray(infoarray(0,0),3)=basedir
End Function
Function AddJobInfo(infoarray,reldir,file)
if infoarray(0,0) >= UBound(infoarray) then
MsgBox "AddRemoteInfo : array fulled"
Quit 1
End If
infoarray(0,0) = infoarray(0,0) + 1
infoarray(infoarray(0,0),0)=reldir
infoarray(infoarray(0,0),1)=file
End Function
Function InitTEObj(teobj,infoarray,i)
teobj.Protocol = "FTP"
teobj.Host = infoarray(i,0)
teobj.Login = infoarray(i,1)
teobj.Password = infoarray(i,2)
teobj.UseProxy = "OFF"
teobj.MaxConnections = 5
teobj.TransferType = "ASCII"
End Function
Dim appname '應用程式名稱
Dim report '報告
Dim i,j '通用迴圈變數
appname = "省集中 檔案發布"
report = ""
MsgBox "CuteFTP pro VBS 指令碼 啟動 - " & appname
Dim MySite 'FTP網站
Dim LocalDir '本地基本路徑 必須是絕對路徑
'建立CuteFtp 對象
Set MySite = CreateObject("CuteFTPPro.TEConnection")
'下標0用於記錄有效資料的個數
Dim RemoteInfo(100,3) '數組下標基於0並且定義的是最大下標,因此可用的為(0-100,0-3)
'第二維依次為主機名稱、登入名稱、口令、基礎路徑,不使用第一維的0
Dim JobInfo(100,1) '不使用第一維的0,第二維依次為相對路徑、檔案名稱
RemoteInfo(0,0)=0
JobInfo(0,0)=0
'本地基本路徑
LocalDir="本地根目錄" '必須是絕對路徑
'網站資訊,只能添加一個遠端站台,添加多個未經測試
AddRemoteInfo RemoteInfo,"ip地址","使用者名稱","密碼","遠程根目錄"
'任務資訊
'AddJobInfo JobInfo,"相對路徑","檔案名稱,可帶萬用字元,遞迴的"
'AddJobInfo JobInfo,"相對路徑","檔案名稱,可帶萬用字元"
'AddJobInfo JobInfo,"相對路徑","檔案名稱,可帶萬用字元"
'AddJobInfo JobInfo,"相對路徑","檔案名稱,可帶萬用字元"
report = "即將執行下列任務:" & Chr(13) & Chr(10)
For i=1 To JobInfo(0,0)
report = report & Chr(13) & Chr(10) & JobInfo(i,0) & " - " & JobInfo(i,1)
Next
report = report & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "本地路徑: " & Chr(13) & Chr(10) & LocalDir
report = report & Chr(13) & Chr(10) & "目的: "
For i=1 To RemoteInfo(0,0)
report = report & Chr(13) & Chr(10) & RemoteInfo(i,0) & ":" & RemoteInfo(i,3)
Next
If vbCancel = MsgBox(report,vbOKCancel) Then
Quit 1
End If
report = ""
For i=1 To RemoteInfo(0,0)
InitTEObj MySite,RemoteInfo,i
'串連到網站
MySite.Connect
If (Not Cbool(MySite.IsConnected)) Then
MsgBox "Could not connect to: " & MySite.Host & " Aborting!" &MySite.ErrorDescription
Quit(1)
End If
For j=1 To JobInfo(0,0)
lrChangeDir MySite,LocalDir,RemoteInfo(i,3),JobInfo(j,0)
MySite.Upload JobInfo(j,1)
Next
'關閉串連
MySite.Close
report = report & Chr(13) & Chr(10) & RemoteInfo(i,0)
Next
MsgBox "CuteFTP pro VBS 指令碼 結束 - " & appname & Chr(13) & Chr(10) & report