码农家园

关闭
导航

使用用户名和密码登录VBScript FTP


ftploginpasswordsusernamevbscript

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:驱动器,然后查看其他可见内容。

相关讨论

  • 它会自动运行,但不是F: drive给我问题。 在此之前是FTP站点。 该代码甚至没有进入F: drive部分。
  • 由于错误是"文件夹不存在",因此我假设您是指本地文件系统。 这还不是很清楚。


Copyright ©  码农家园 联系:[email protected]