これからの季節に親子でハイキング! >>

VBSについての質問です

WINDOWSからSolarisにFTP接続してファイルを取得するVBスクリプト。
・ /export/home/backup/mysql/の下にあるファイルを取得
・ /export/home/backup/www/の下にあるファイルを取得
・取得したいファイル名をリスト化、そのリストを読み込んで、
1つのファイルをGET.→FTP切断→FTP接続→ファイルGET→FTP切断の繰り返し
・取得したファイルはSolarisから削除
・日付を管理。最新のを5つだけ残す。一番ファイルを削除

こういったVBSはどうつくればいいんでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

VBSというのはWSH(Windows Script Host) VBScriptと推察しました。

ご要望のことはWindowsのftpコマンド+VBSでもできるでしょう。

例えば基本的なところでファイル一覧を取得するのでしたら、

c:\ftpCommandList.txtに下記のftpコマンドを記述しておきます。
-----
ユーザ名
パスワード
cd ディレクトリ移動
dir - c:\ftpdir.txt
bye
-----

c:\ftpList.vbsに下記のVBSを記述しておきます。
-----
set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "ftp -s:c:\ftpCommandList.txt ホスト名"
-----

c:\ftpList.vbsをダブルクリックして実行するとc:\ftpdir.txtにファイル一覧が得られます。

「日付を管理。最新のを5つだけ残す」というような処理はVBSで作成し、ftpコマンドに展開すればよいと思います。

ftpコマンド及びWSH VBScriptの文字列の扱いについて勉強する必要があり、やはり下記のようなサイトで一通りドキュメントを読み、サンプルを試すのがよいでしょう。
http://www.microsoft.com/japan/msdn/scripting/
http://www.microsoft.com/japan/technet/scriptcen …

一気に最終形を作るのではなく、部品(例えばファイル一覧からファイル名を切り出してftpコマンドに展開など)を作って組み合わせるようにするとよいと思います。そして、わからないポイントに絞って質問して頂ければアドバイスできます。
    • good
    • 0

ちょっと、考えてみました。



VBから手軽に使える、同期型FTPクライアントDLL
http://www.vector.co.jp/soft/win95/prog/se085139 …
などを使ってみる。


UWSC(自動化ソフト)とFTPのフリーソフトを合わせて使ってみる。
http://www.uwsc.info/index.html
http://search.vector.co.jp/search?doc=software&q …

あと、なでしこにもFTP関係の命令が沢山有るのでできるかも、
http://nadesi.com/
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBSで *.txt をサーバーにFTPするには?

お世話になります。

早速ですが、
「ftpserver の plt00h フォルダー に *.txt をアップロードする」VBSのプログラムを作るため、
調べたところ、「ファイルをFTPするプログラムをNameSpaceで記述できる」とあったので
見てみると、JavaScript で記述してる例でした。

この例をもとに、VBSにする挑戦をしていますが、なかなかうまくいきません。

== JS sample ============================
var oShell = WScript.CreateObject("Shell.Application");
var oFolder = oShell.NameSpace("ftp://ftpusr:ftpusr@ftpserver/plt00h/")

var desktop = oShell.NameSpace(0);
var objFolderItems = desktop.Items();
for(var i = 0; i < objFolderItems.Count; i++) {
var ofitem = objFolderItems.Item(i);
if(ofitem.Name == "a.txt") {
oFolder.CopyHere(ofitem);
WScript.Sleep(6000);
break;
}
}
====================================================

上のコードをもとに、
「ftpserver の plt00h フォルダー に *.txt を,plt00vに *.org をアップロードする」
VBSのプログラム書きたいのですが、なかなかうまくいきません。

== VBS =============================================
Option explicit

Dim oShell, FolderH, FolderV, desktop, objFolderItem

Set oShell = WScript.CreateObject("Shell.Application")

Set FolderH = oShell.NameSpace("ftp://ftpusr:ftpusr@ftpserver/plt00h/")
Set FolderV = oShell.NameSpace("ftp://ftpusr:ftpusr@ftpserver/plt00v/")

Set desktop = oShell.NameSpace(0)
Set objFolderItems = desktop.Items()

FolderH.CopyHere("*.txt") ← FTPサーバーのplt00h ヘ*.txtをアップロード?
FolderV.CopyHere("*.org") ← FTPサーバーのplt00v ヘ*.orgをアップロード?

WScript.Sleep(6000)

====================================================

FTPホスト     :ftpserver,
FTPユーザ     :ftpusr
FTP パスワード  :ftpusr
FTP先DIR     :plt00h, plt00v
送信対象ファイル: :*.txt, *.org

ちなみに、 ftp -s: ftp.txt の方式は、VBSで作成して、実行できました。

ご指導よろしくお願いいします。

お世話になります。

早速ですが、
「ftpserver の plt00h フォルダー に *.txt をアップロードする」VBSのプログラムを作るため、
調べたところ、「ファイルをFTPするプログラムをNameSpaceで記述できる」とあったので
見てみると、JavaScript で記述してる例でした。

この例をもとに、VBSにする挑戦をしていますが、なかなかうまくいきません。

== JS sample ============================
var oShell = WScript.CreateObject("Shell.Application");
var oFolder = oShell.NameSpace("ftp://ftpusr:ft...続きを読む

Aベストアンサー

No.1です。

No.1のアドバイスをもとに、Name()メソッドで1個ずつ
ファイル名を確認しながらCopyHere()する処理をVBScriptで
書こうとしてつまづいているのですよね?

No.2補足の質問を回答しておきます。

(質問1)
NameSpace()の正式な仕様は、
http://msdn.microsoft.com/en-us/library/bb774085(VS.85).aspx
に書かれています。ここからリンクされている
ShellSpecialFolderConstantsの説明
http://msdn.microsoft.com/en-us/library/bb774096(VS.85).aspx
に、指定可能な数値とその意味が書かれています。
英語がつらいなら、とりあえず
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/shell.htm
がで雰囲気をつかむとよいと思います。

(質問3)
VBScriptのIf文の比較条件式は「==」ではありません。
「=」です。


ついでに指摘を。

For i = 1 to objFolderItems.Count - 1 step 1
→「i = 0」からスタートすべきでしょう。

If ofitem.Name == "FFFTP" then oFolder.CopyHere(ofitem)
→"FFFTP"と比較しても、おそらく一致するものはないでしょう。
デスクトップにFFFTPへのショートカットファイルがあって、
それを検索しているのだったら"FFFTP.lnk"とすべきでしょう。
また、元の質問にあるような"*.txt"を検索したいのだったら
If LCase(Right(ofitem.Name,4)) = ".txt" then ~
のようにすべきでしょう。

No.1です。

No.1のアドバイスをもとに、Name()メソッドで1個ずつ
ファイル名を確認しながらCopyHere()する処理をVBScriptで
書こうとしてつまづいているのですよね?

No.2補足の質問を回答しておきます。

(質問1)
NameSpace()の正式な仕様は、
http://msdn.microsoft.com/en-us/library/bb774085(VS.85).aspx
に書かれています。ここからリンクされている
ShellSpecialFolderConstantsの説明
http://msdn.microsoft.com/en-us/library/bb774096(VS.85).aspx
に、指定可能な数値とその意味が書かれています。
英...続きを読む

QWSHファイルからFTPを利用してダウンロードする

batファイル,もしくはWSHファイルを使用してのFTPサーバからのファイルダウンロードを行う際の記述方法について質問致します。

行いたいことはFTPサーバ側に日毎のディレクトリが作成され
その中に格納されるテキストファイルを自動でローカルの指定ディレクトリに上書きする手順になります。
WSHに関しては全くの素人なので非常に苦戦しております…

FTPサーバ側
/@day/*.txt
@dayには本日の日付が2桁で入ります。
1月1日なら01、2月23日なら23

Local保存側
D:\temp

お手すきの時にでもご教授頂ければ幸いです。

Aベストアンサー

FTPコマンドには詳しくないのですがWSHはわかります。手順はこんな感じでしょうか。

(1)FTPコマンドを記述したファイルのテンプレートを作成しておく。
(2)WSHでテンプレートから本日のFTPのためのファイルを作成する。
(3)WSHでFTP -s:ファイル名 ホスト名 を実行する。

そこで(2)の方法ですけれども、例えばFTPコマンドを記述したファイルが C:\FTPtemplate.txt にあり、その中に本日の日付にしたい文字 @day が埋め込んであるものとします。@day を本日の日付2桁に書き換えて C:\FTPtoday.txt を作成するWSH JScriptは下記になります。

// FTPreplace.js
var Ifile="C:\\FTPtemplate.txt";
var Ofile="C:\\FTPtoday.txt";
var Fs =WScript.CreateObject("Scripting.FileSystemObject");
var ForReading=1, ForWriting=2;
var Itxt, Otxt, Iall, Oall, dd, re;

Itxt=Fs.OpenTextFile(Ifile, ForReading);
Iall=Itxt.ReadAll();
Itxt.Close();

dd=(new Date()).getDate().toString(10); if (day.length==1) day="0"+day;
re=/@day/gm;
Oall=Iall.replace(re, dd); // 全ての@dayを今日のddに置き換える

Otxt=Fs.OpenTextFile(Ofile, ForWriting, true); // 上書き
Otxt.Write(Oall);
Otxt.Close();
// ここまで

あとはWSHのRunメソッドでFTPコマンドを実行すればよいと思います。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/wsmthrun.asp

FTPコマンドには詳しくないのですがWSHはわかります。手順はこんな感じでしょうか。

(1)FTPコマンドを記述したファイルのテンプレートを作成しておく。
(2)WSHでテンプレートから本日のFTPのためのファイルを作成する。
(3)WSHでFTP -s:ファイル名 ホスト名 を実行する。

そこで(2)の方法ですけれども、例えばFTPコマンドを記述したファイルが C:\FTPtemplate.txt にあり、その中に本日の日付にしたい文字 @day が埋め込んであるものとします。@day を本日の日付2桁に書き換えて C:\FTPtoday.txt を作成す...続きを読む

QVBScriptでFTPサイトからダウンロードさせたい。

こんにちは。
VBS(初心者)です。
このところ1週間くらい悩んでいるので教えて下さい。
VBSでFTPサイトから複数ファイルをダウンロードさせたいのですが、エラーが出てうまくいきません。
具体的には、
xxx.vbsをWクリックすれば、FTPサイトにアクセスし、ファイルをローカルにダウンロード完了。まで行いたいです。
現在、
1.ローカルフォルダTempにアクセス
2.TempからTemp1にコピー
3.Temp1からTemp2に移動
4.TempとTemp2のファイルサイズ表示、終了
という.vbsは出来ているんですが、1.をFTPサイトにしたいのです。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=381743
なども見てみましたがイマイチ理解できませんでした。
call FTPDownload($server, $user, $pwd, $svr_fname, $cli_fname[, $bin_flag, $proxy, $port])
上記でもうまくいかないのですが・・・
.vbsでIEを起動したりすることは出来ています。
どなたかごぞんじ又は、サンプルが載っているサイトがあれば教えて下さい。
よろしくおねがいします。

こんにちは。
VBS(初心者)です。
このところ1週間くらい悩んでいるので教えて下さい。
VBSでFTPサイトから複数ファイルをダウンロードさせたいのですが、エラーが出てうまくいきません。
具体的には、
xxx.vbsをWクリックすれば、FTPサイトにアクセスし、ファイルをローカルにダウンロード完了。まで行いたいです。
現在、
1.ローカルフォルダTempにアクセス
2.TempからTemp1にコピー
3.Temp1からTemp2に移動
4.TempとTemp2のファイルサイズ表示、終了
という.vbsは出来ているんですが、1.をFTPサイト...続きを読む

Aベストアンサー

basp21(フリーなCOM)を使えば簡単に出来るでしょう。
http://www.hi-ho.ne.jp/babaq/basp21f.html

QWshShellから起動したbat(ftp)の応答メッセージを取得するには

下のbatファイルをDosプロンプトから起動した場合は
resulf.logに230 User zerokara logged in.と出力されますが、
これをVBからWshShellオブジェクトのExecメソッドで起動しますと
resulf.logにftpの応答メッセージ(230 User zerokara logged in.など)が
出力されませんのでfindできずエラーを返してしまいます。
よろしければ、この現象の意味とWshから起動した場合にresulf.logに
ftpの応答メッセージを出力する方法を教えてください。
宜しくお願いします。


test1.bat
ftp -s:C:\VB\ftp_test.scr >resulf.log
type resulf.log | find /i "230"
IF NOT %ERRORLEVEL% == 0 GOTO ERROR
copy 命令

Aベストアンサー

>Set we = ws.Exec("cmd.exe /c D:\VB\test.bat > test.log")

見落としてました(^^;
Exec使ってたんですね。
でしたら標準出力への出力結果はファイルには出ません。
Execメソッドの戻り値であるWshScriptExecのStdOutプロパティからアクセスすることになります。

ファイルに出力されるのを希望されるんでしたら、Execではなく、Runメソッドを使用してください。こちらでも終了待てますんで。

QVBSでFTPを記述できますか?

OSはWIN2K PROですが、
FTPサーバーより、あるファイルをGETする
バッチファイルを作成しました。

ftp 172.16.1.1
get test.txt c:\temp\get.txt

バッチファイルで作成したのですが、
VBSでFTPサーバーよりファイルをGETする
ということは可能でしょうか?

初心者ですが、よろしくお願いいたします。

Aベストアンサー

どのレベルで取得したいかわかりませんが、
ベタFTP呼び出しによる転送なら、こちらが参考になるのではないかと思います。

http://hp.vector.co.jp/authors/VA006065/soft/ftpgen.htm

VBSでFTP接続から転送までコーディングしたかったら・・。
http://nt.sakura.ne.jp/~krsna/nazo/visitor/vi998001.html
http://www.b21soft.co.jp/basp21/basp21pftp.html

QFTPでリモートのファイル一覧取得

BashでFTPでリモートに接続し、リモートの対象フォルダ内のファイル一覧をローカルフォルダ内にファイルとして出力するにはどうしたらいいのでしょうか?
教えて下さい。

Aベストアンサー

bashということは、Unix系のコマンドライン操作ですね。

ftpコマンド処理を自動化するようにして、その標準出力をファイルにリダイレクトすればできると思います。
例えば、ftp.batに以下の内容を書いておきます。
---------------------------------------
open ftp.hoge.com
user USER PASSWD
cd DST_DIR
ls
---------------------------------------
※ USERはftpサーバのユーザ名です。
※ PASSWDはftpサーバのパスワードです。
※ DST_DIRはlsしたい対象ディレクトリ(のフルパス)。

このファイルを使って、-nオプション付きでftpプログラムを以下のように実行します。

ftp -n < ftp.bat > ls.txt

ls.txtには、目的のディレクトリでlsした結果が書き込まれます。

「ftpコマンド処理を自動化する」については、参考URLを見てください。Windowsの標準のftpでも同じことができますが、ちょっとお行儀が違うようです。Windowsについては、以下を参考にしてください。
http://www.atmarkit.co.jp/fwin2k/win2ktips/270ftpscript/ftpscript.html

参考URL:http://www.zdnet.co.jp/help/tips/linux/l0462.html

bashということは、Unix系のコマンドライン操作ですね。

ftpコマンド処理を自動化するようにして、その標準出力をファイルにリダイレクトすればできると思います。
例えば、ftp.batに以下の内容を書いておきます。
---------------------------------------
open ftp.hoge.com
user USER PASSWD
cd DST_DIR
ls
---------------------------------------
※ USERはftpサーバのユーザ名です。
※ PASSWDはftpサーバのパスワードです。
※ DST_DIRはlsしたい対象ディレクトリ(のフルパス)。

このファ...続きを読む

QFTPサーバーから受信したファイル一覧からファイル名だけを取得したいです

こんばんは。いつもお世話になっております。

VB.NET+WinXPなのですが、
FTPサーバーにログインして、
LISTコマンドでファイル一覧を要求すると
「drwxrwxr-x 2 53 53 4096 Feb 28 2006 abc」
などというファイルやフォルダの一覧がかえって来ると思うのですが、
この中からファイル名やフォルダ名だけを取得するには
どうしたらよいでしょうか。
TABやコンマが入っていないので、文字列関数で切り取るにも
区切りがわからないと思うのです。
ローカルドライブのDir関数なら、FileAttribute.Nomalや.Directoryの指定でファイル名だけや
ディレクトリー名だけを指定して
取得することが出来るのですが、FTPサーバーの場合からの場合はどういった方法があるでしょうか。
参考程度でも構いませんので教えて頂けるとたすかります。m(__)m

Aベストアンサー

#1>ファイル名やディレクトリ名にスペースが使われている場合もあって難しいかなと思うのですが、
全然問題なし♪
例えば
件のリストの1行はスペースで区切られた9のフィールドと考えられますけど、その場合
$line="-rwxrwxr-x 2 53 53 4096 Feb 28 2006 include space 1.jpg";
@field = split(/\s+/, $line, 9);#フィールド数をしていすると、最後はまとめられる

print $field[8];# 9番目のフィールドにスペースがあっても大丈夫

Qftpコマンドの戻り値をチェックしたい

現在業務でftpコマンドを用いたバックアップシェルを作成しております。(RHEL4)
クーロンでシェルAを呼び、シェルA内でftpコマンド発行→ファイルB内のftpコマンドを実行→シェルAに戻る、という仕様ですが、このftpコマンドが成功したのか失敗したのかをプログラム上で判断する方法はありますでしょうか?

Aベストアンサー

shogo0809さんの回答に便乗します。
実行ログをファイルに落としてgrepするのがよいと思います。
以前、似たような質問があったので
具体的な手順は参考URLのほうを見てはどうでしょうか?

→シェルスクリプトでFTPの実行結果を取得するには

参考URL:http://oshiete1.goo.ne.jp/qa2656080.html

Qファイルコピーのスクリプトで上書き確認のダイアログが表示

Windows2003 Server にて、
ファイルコピーのスケジュールを登録しようと
下記のスクリプトを作りましたが、
実行すると「上書き確認」のダイアログが表示されてしまいます。
上書き確認のダイアログを表示させずに、
自動で上書きさせる方法を教えてください。
---------------------------------------------------
Set WshShell2 = WScript.CreateObject("Shell.Application")
Set oFolder=WshShell2.NameSpace(ToFolder)
oFolder.CopyHere FromFile, &h10
---------------------------------------------------
「WScript」を使っているのは、
コピーしている事が視覚的に分かりたいので、書類が飛んでいる表示をさせたいからです。

Aベストアンサー

oFolder.CopyHereの第二引数にFOF_NOCONFIRMATION(0x0010)を指定します。

http://homepage3.nifty.com/aya_js/wsh/wsh24.htm

QWSH.Run の処理内容をテキストに落とすには

WSHを利用して、アプリケーションを実行しています。その際の、処理内容(結果)をテキストに落としたいのですが、うまくいきません。どなたか、アドバイスを宜しくお願いします。

Aベストアンサー

単純に実行の仕方がまずいだけかと。

CScript スクリプト名 //Nologo >c:\list.txt

vbsやjsのファイルを直接起動してるのにWScriptが規定のスクリプトエンジンになってませんか?

そんなことをしたくないのであれば、RunメソッドではなくExecメソッドを使い、StdOutを自分でテキストファイルに出力してください。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/wslrfexecmethod.asp

参考URL:http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/wslrfexecmethod.asp


人気Q&Aランキング