VBScript FTP Login with Username and Password
我正在尝试更新VBScript(对此经验很少,我做了很多VB.NET),该文件每天读取一个FTP目录并将某些文件移动到新的本地目录中。 我有旧的代码可以在使用匿名登录的FTP站点上工作,但是现在我需要它来访问需要用户名和密码的FTP站点。
这是我当前的代码-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | Sub MoveNSPurolatorFile() Dim NSPurolatorFTPSite, NSPurolatorMoveFilePath, NSPurolatorFTPFolder, NSPurolatorFTPFileName Dim folder, files Dim fso set fso = CreateObject("Scripting.FileSystemObject") NSPurolatorFTPSite="\\xxx.xxx.x.xx" NSPurolatorMoveFilePath ="F:\TestDirectory" NSPurolatorFTPFolder ="TestFolder" NSPurolatorFTPFileName = "MAN0201.CSV" If InStr(NSPurolatorFTPFileName,"_processed") = 0 and InStr(NSPurolatorFTPFileName,".CSV") > 0 Then If fso.FolderExists(NSPurolatorFTPSite & NSPurolatorFTPFolder) Then If fso.FileExists(NSPurolatorFTPSite & NSPurolatorFTPFolder & NSPurolatorFTPFileName) Then objfile.writeline"NS Purolator File Found:" & NSPurolatorFTPSite & NSPurolatorFTPFolder & NSPurolatorFTPFileName fso.copyFile NSPurolatorFTPSite & NSPurolatorFTPFolder & NSPurolatorFTPFileName, NSPurolatorMoveFilePath &"" Else objfile.writeline"File does not exist:" & NSPurolatorFTPSite & NSPurolatorFTPFolder & NSPurolatorFTPFileName End If End If End If Next End Sub |
它说该文件夹不存在,但是我知道它存在,并且当我针对不需要用户名和密码的ftp站点运行此代码时,它可以正常工作。 我想我的问题是-在尝试访问文件夹等之前,如何使用VBScript将用户名和密码传递到ftp站点?
谢谢。
这确实是一个非常糟糕的方法。您不能仅将远程FTP站点上的文件夹视为本地文件夹。
您确实应该使用InetCtrls.Inet.1
这是我从其他地方提出的示例,该示例未完成您想要的操作,但是包含了您需要的所有部分-您需要将其分开以适应您的需求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 'Option Explicit 'const progname="FTP upload script by Richard Finegold" 'const url ="ftp://ftp.myftpsite.com" 'const rdir ="mydir" 'const user ="anonymous" 'const pass ="[email protected]" 'This is an example of ftp'ing without calling the external"FTP" command 'It uses InetCtrls.Inet.1 instead 'Included is a"hint" for simple downloading 'Sources: 'http://msdn.microsoft.com/library/partbook/ipwvb5/loggingontoftpserver.htm 'http://msdn.microsoft.com/library/partbook/egvb6/addinginternettransfercontrol.htm 'http://cwashington.netreach.net/ - search on"ftp" - inspiration only! 'Insist on arguments dim objArgs Set objArgs = Wscript.Arguments If 0=objArgs.Count Then MsgBox"No files selected for operation!", vbOkOnly + vbCritical, progname WScript.Quit End If 'Force console mode - csforce.vbs (with some reorganization for efficiency) dim i if right(ucase(wscript.FullName),11)="WSCRIPT.EXE" then dim args, y For i = 0 to objArgs.Count - 1 args = args +"" + objArgs(i) Next Set y = WScript.CreateObject("WScript.Shell") y.Run"cscript.exe" & wscript.ScriptFullName +"" + args, 1 wscript.quit end if 'Do actual work dim fso, ftpo set fso = WScript.CreateObject("Scripting.FileSystemObject") set ftpo = WScript.CreateObject("InetCtls.Inet.1") 'Msinet.ocx ftpo.URL = url ftpo.UserName = user ftpo.Password = pass WScript.Echo"Connecting..." ftpo.Execute ,"CD" & rdir do ' WScript.Echo"." WScript.Sleep 100 'This can take a while loop while ftpo.StillExecuting for i = 0 to objArgs.Count - 1 dim sLFile sLFile = objArgs(i) if (fso.FileExists(sLFile)) then WScript.Echo"Uploading" & sLFile &" as" & FSO.GetFileName(sLFile) &"" ftpo.Execute ,"Put" & sLFile &"" & FSO.GetFileName(sLFile) 'ftpo.Execute ,"Get" & sRemoteFile &" C:" & sLFile do 'WScript.Echo"." WScript.Sleep 100 'This can take a while loop while ftpo.StillExecuting else MsgBox Chr(34) & sLFile & Chr(34) &" does not exist!", _ vbOkOnly, progname end if next WScript.Echo"Closing" ftpo.Execute ,"Close" WScript.Echo"Done!" |
这是一种非常不错的方法-我敢肯定,可以对此进行改进,但是我已经做好了.. :-)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | Dim fso, folder1, folder2, folder2a Set fso = CreateObject("Scripting.FileSystemObject") Set folder2a = fso.GetFolder("C:\temp") ftpFolderString ="ftp://username:[email protected]/folderpath" targetFoldder ="C:\temp" fileSearchStr ="searchstring" Dim SH, txtFolderToOpen, thing Set SH = CreateObject("Shell.Application") 'SH.Open txtFolderToOpen Set folder1 = SH.NameSpace(ftpFolderString) Set folder2 = SH.NameSpace(targetFoldder) For Each item In folder1.items If InStr(LCase(item.Name),fileSearchStr) > 0 Then Debug.WriteLine item.Name folder2.CopyHere item,4 WScript.Sleep(200) For Each item2 In folder2a.Files If item2.Name = item.Name Then While item2.Size < item.Size WScript.Sleep(200) Wend End If Next WScript.Sleep(200) End If Next Set SH = Nothing Debug.WriteLine"Done" |
FTP站点是否通过UNC路径访问(看起来像是这样)?如果这只是一个标准的FTP地址,则可以将用户名/密码合并到网址中,例如ftp:// user:[email protected]。如果您尝试使用不同的凭据访问的是UNC路径,则最简单的方法可能是映射驱动器,执行工作,然后取消映射驱动器。在这里可以找到2种不同的方法
脚本如何运行?手动,自动吗?通过服务?
作为服务运行时,映射字母驱动器并非始终可用。
对脚本进行实验,以确保该脚本甚至能够看到F:驱动器,然后查看其他可见内容。