2009-06-30 9 views
0

Je suis en train de mettre à jour un VBScript (très peu d'expérience avec cela, je fais beaucoup de VB.NET), qui lit un répertoire FTP et déplace certains fichiers vers un nouveau répertoire local sur un base quotidienne. J'ai un ancien code qui fonctionne sur un site FTP qui utilise des connexions anonymes, mais j'en ai maintenant besoin pour accéder à un site FTP qui nécessite un nom d'utilisateur et un mot de passe.Connexion VBScript FTP avec nom d'utilisateur et mot de passe

Voici mon code actuel -

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 

Il dit que le dossier n'existe pas, mais je sais qu'il fait et quand je lance ce code sur un site ftp qui ne nécessite pas le nom d'utilisateur et mot de passe, il fonctionne très bien . Je suppose que ma question est - Comment puis-je passer le nom d'utilisateur et mot de passe en utilisant VBScript sur le site ftp avant d'essayer d'accéder aux dossiers, etc?

Merci.

Répondre

0

Comment est le script en cours d'exécution? Manuellement, automatiquement? Par un service?

lecteurs mappés lettres ne sont pas toujours disponibles lors de l'exécution en tant que service.

expérience avec le script pour vous assurer qu'elle même en mesure de voir le F: \ lecteur, puis voir ce que le reste est visible.

+0

Il sera exécuté automatiquement, mais ce n'est pas le lecteur F: \ qui me pose le problème. C'est le site FTP avant cela. Le code ne parvient même pas à la partie F: \ drive. –

+0

Comme l'erreur était "le dossier n'existe pas", j'ai supposé que vous faisiez référence au système de fichiers local. Ce n'est pas complètement clair. –

0

est le site FTP accessible par un chemin UNC (ressemble est)? Si ce n'est qu'une adresse FTP standard, vous pouvez incorporer le nom d'utilisateur/mot de passe dans l'URL, par exemple. ftp://user:[email protected]. S'il s'agit d'un chemin UNC auquel vous essayez d'accéder en utilisant des informations d'identification différentes, le plus simple serait probablement de mapper un lecteur, de faire le travail, puis de démapper le lecteur. 2 approches différentes peuvent être trouvées here

4

Ceci est vraiment un moyen incroyablement mauvais pour le faire. Vous ne pouvez pas traiter les dossiers sur un site FTP distant comme des dossiers locaux.

Vous devriez vraiment être en utilisant InetCtrls.Inet.1

Voici un exemple que je soulevai d'ailleurs qui ne fait pas ce que vous voulez, mais contient toutes les pièces dont vous avez besoin - vous devez le prendre à part pour costume vos besoins.

'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

est ici une jolie belle façon de le faire - je suis sûr que cela pourrait être amélioré, mais je viens de recevoir ça va .. :-)

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" 
Questions connexes