2009-06-30 27 views
0

私はVBScriptを更新しようとしています(この経験はほとんどありませんが、VB.NETがたくさんあります)。FTPディレクトリを読み込み、特定のファイルを新しいローカルディレクトリに移動します。日常的。匿名ログインを使用するFTPサイトで動作する古いコードがありますが、現在はユーザー名とパスワードが必要なFTPサイトにアクセスする必要があります。ここでVBScript FTPユーザー名とパスワードでのログイン

が私の現在のコードです -

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サイトに渡すにはどうしたらいいですか?

ありがとうございました。

答えて

0

スクリプトはどのように実行されていますか?手動で、自動的に?サービス?

マッピングされたドライブは、サービスとして実行しているときには常に利用可能なわけではありません。

スクリプトを試して、F:\ドライブが表示されていることを確認し、表示されているものが何であるかを確認してください。

+0

:-) ..私はこれを大幅に改善することができ確信しているが、私はちょうどそれが起こってしまったが、それは私に問題を与えているF:\ドライブではありません。その前のFTPサイトです。コードはF:\ドライブの部分にさえしません。 –

+0

エラーは "フォルダーは存在しませんでした"ので、私はあなたがローカルのファイルシステムを参照していると仮定しました。それは完全にはっきりしていない。 –

0

FTPサイトはUNCパスでアクセスされていますか?標準のFTPアドレスであれば、URLにユーザー名とパスワードを組み込むことができます。 ftp://user:[email protected]。異なる資格情報を使用してアクセスしようとしているUNCパスの場合、最も簡単な方法は、ドライブをマップし、作業を行い、次にドライブをマップ解除することです。 2つの異なるアプローチが見つかりますhere

4

これは本当にこれを行うには非常に悪い方法です。リモートFTPサイトのフォルダをローカルフォルダとして扱うことはできません。あなたは本当にここInetCtrls.Inet.1

を使用する必要があります

は、あなたがやりたいことはありません、私はどこか別の場所から持ち上げ例ですが、あなたが必要なすべての部品が含まれている - あなたはスーツに離れて、それを選択する必要がありあなたの要望。

'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

ここでそれを行うにはかなりいい方法です - それは自動的に実行されます

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" 
関連する問題