- ベストアンサー
バッチファイルにてFTPで指定したファイルを取得する方法
- WindowsXPProのOSを使用して、バッチファイルを作成し、FTPを使用して指定したファイルを取得する方法について説明します。
- BATファイルとバッチファイルを使用して、FTPを実行し、特定のディレクトリにあるファイルを取得します。具体的には、指定した日付範囲のファイルを一括で取得する方法、FTP終了後にバッチスクリプトを実行する方法について説明します。
- 質問の内容について、FTPを使用してファイルを取得する方法と、日付範囲でのファイル取得、バッチスクリプトの実行方法についての詳細な説明が求められています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
バッチで日付を扱うのはけっこう難しいですよね。 VBSで、 ・指定した期間内のログファイルをftpでgetするftp.getファイルを生成し、 ・getした複数のログファイルを copy で1つのファイル(c:\access_all_log.txt)にまとめ、個々のログファイル(log.yymmdd)を削除するバッチファイルを生成 するスクリプトを作ってみました。 まず、MakeGetFtp.vbs という名前で、以下の内容のファイルをバッチファイルと同じディレクトリに作成してください。(IPアドレス、ユーザ名等は本当のものに書き換えてください) ---------------------------------------------- Dim strDate(2) Dim argDate(2) Dim TmpDate,d, i,logfile Dim FSO,FtpFile,CopyBat Dim GetStr,CopyStr,DelStr '引数の数チェック If WScript.Arguments.Count <> 2 Then WScript.Echo("開始日付と終了日付を指定してください") WScript.Quit(1) End If '各スクリプト、バッチファイルに渡す日付パラメータの作成 For i = 1 to 2 strDate(i) = Wscript.Arguments.Item(i - 1) If Not IsNumeric(strDate(i)) or _ Len(strDate(i)) <> 6 Then WScript.Echo(CStr(i) & "番目の日付の書式が間違っています。") WScript.Quit(1) End If argDate(i) = DateValue("20" & Left(strDate(i),2) & "/" & _ Mid(strDate(i),3,2) & "/" & Right(strDate(i),2)) Next '初期化 CopyStr = "Copy " DelStr = "Del " 'FTPのgetコマンド、BATのCOPYコマンド、DELコマンドを作成 For d = argDate(1) to argDate(2) TmpDate = FormatDateTime(d,2) TmpDate = Mid(TmpDate,3,2) & Mid(TmpDate,6,2) & Mid(TmpDate,9,2) logfile = "log." & TmpDate GetStr = GetStr & "get " & logfile & vbCrlf CopyStr = CopyStr & logfile & "+" DelStr = DelStr & logfile & " " Next 'FTPコマンドをファイルに出力 Set FSO = CreateObject("Scripting.FileSystemObject") With FSO.CreateTextFile("get.ftp") Set FSO = CreateObject("Scripting.FileSystemObject") With FSO.CreateTextFile("get.ftp") .WriteLine("open 10.0.X.X") .WriteLine("username") .WriteLine("password") .WriteLine("cd /log") .WriteLine(GetStr) .WriteLine("quit") .Close End With CopyStr = Left(CopyStr,Len(CopyStr)-1) & " c:\access_all_log.txt" With FSO.CreateTextFile("TmpCopy.bat") .WriteLine("@echo off") .WriteLine(CopyStr) .WriteLine(DelStr) .Close End With Set FSO = Nothing ---------------------------------------------- そして、FTPを行うバッチファイルを以下の内容にしてください。 ---------------------------------------------- @echo off cscript MakeGetFtp.vbs %1 %2 if %errorlevel% EQU 1 goto end ftp -s:get.ftp TmpCopy.bat :end ---------------------------------------------- 上記のバッチファイルの名前を、ftpget.bat とすると、 ftpget.bat 070301 070315 と日付を指定して実行すると、その期間のログをFTPでgetし、c:\access_all_log.txt にまとめられます。
その他の回答 (2)
- ham_kamo
- ベストアンサー率55% (659/1197)
No.2です。すみません、誤記がありました。 MakeGetFtp.vbs の中で、 'FTPコマンドをファイルに出力 Set FSO = CreateObject("Scripting.FileSystemObject") With FSO.CreateTextFile("get.ftp") Set FSO = CreateObject("Scripting.FileSystemObject") With FSO.CreateTextFile("get.ftp") と同じ2行が繰り返されていますが、これは 'FTPコマンドをファイルに出力 Set FSO = CreateObject("Scripting.FileSystemObject") With FSO.CreateTextFile("get.ftp") と1つだけの誤りでした。
- canonbowl
- ベストアンサー率41% (14/34)
参考URL参照 (環境変数の演算->ファイル作成->ftp->ループ)
お礼
ありがとうございます。 少し遅くなりましたが、完成できました。