2009-06-30 18 views
0

Ich versuche ein VBScript zu aktualisieren (sehr wenig Erfahrung damit, ich mache eine Menge VB.NET), liest ein FTP-Verzeichnis und verschiebt bestimmte Dateien in ein neues lokales Verzeichnis auf einem täglich. Ich habe alten Code, der auf einer FTP-Site funktioniert, die anonyme Logins verwendet, aber ich brauche sie jetzt, um auf eine FTP-Site zuzugreifen, die Benutzername und Passwort benötigt.VBScript FTP Login mit Benutzername und Passwort

Hier ist meine aktuellen Code -

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 

Es sagt der Ordner nicht vorhanden ist, aber ich weiß, es tut und wenn ich diesen Code gegen eine FTP-Site, der kein Benutzername und Kennwort erforderlich ist, es funktioniert . Ich denke, meine Frage ist - Wie gebe ich den Benutzernamen und das Passwort mit VBScript an die FTP-Site vor dem Versuch, auf Ordner usw. zuzugreifen?

Danke.

Antwort

0

Wie wird das Skript ausgeführt? Manuell, automatisch? Durch einen Service?

Laufwerke mit zugewiesenen Buchstaben sind nicht immer verfügbar, wenn sie als Dienst ausgeführt werden.

Experimentieren Sie mit dem Skript, um sicherzustellen, dass es sogar das Laufwerk F: \ sehen kann, und sehen Sie dann, was sonst noch sichtbar ist.

+0

Es automatisch ausgeführt wird, aber Es ist nicht das F: \ Laufwerk, das mir das Problem gibt. Es ist die FTP-Site davor. Der Code macht es nicht einmal zum Laufwerksteil F: \. –

+0

Da der Fehler "Ordner existiert nicht" ist, nahm ich an, dass Sie sich auf das lokale Dateisystem beziehen. Es ist nicht ganz klar. –

0

Wird auf die FTP-Site über einen UNC-Pfad zugegriffen (sieht so aus)? Wenn es sich nur um eine Standard-FTP-Adresse handelt, können Sie den Benutzernamen/das Passwort in die URL z. ftp://user:[email protected]. Wenn Sie auf einen UNC-Pfad zugreifen, auf den Sie mit anderen Anmeldeinformationen zugreifen möchten, besteht die einfachste Möglichkeit darin, ein Laufwerk zuzuordnen, die Arbeit auszuführen und dann die Zuordnung des Laufwerks aufzuheben. 2 verschiedene Ansätze können gefunden werden here

4

Dies ist wirklich eine unglaublich schlechte Möglichkeit, dies zu tun. Sie können Ordner auf einer Remote-FTP-Site nicht nur als lokale Ordner behandeln.

Sie sollten wirklich InetCtrls.Inet.1 verwenden werden

Hier ist ein Beispiel, das ich von irgendwo angehoben anderes, das nicht das, was man tut, will, aber enthält alle Teile, die Sie benötigen - Sie können es zu Anzug holen müssen auseinander Deine Bedürfnisse.

'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!" 
2

Hier ist eine ziemlich nette Art, es zu tun - ich bin sicher, dass dies verbessert werden könnte, aber ich gerade in Gang gekommen .. :-)

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" 
Verwandte Themen