人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

「WSH (Windows Script Host)」初心者です。
C:¥AAAというフォルダから、あるサーバーにアップロードするvbsがあります。
現行、バッチファイルやログファイルもC:¥AAAに作成されるように固定で指定されているのですが、これをC:直下でもマイドキュメントでもいいから、vbsファイルのあるフォルダで動かせるように相対パスに変更したいと思っています。

バッチファイルをOPENした後、
ts.WriteLine "cd c:¥AAA"
ts.WriteLine "FTP -s:ftp_aaa.prm > ftp_aaa.log"
ts.WriteLine "bye"
ts.Close
と書き込んでいる部分があり、1行目を直す必要があると思うのですが、どうしてもバッチファイル実行時にエラーとなってしまいます。

急に必要になって、ろくに勉強せずにやろうとしているので、基本的な知識が欠落しているのだろうとは思います。
どうかよろしくお願いします。

●質問者: nozora
●カテゴリ:コンピュータ
✍キーワード:aaa CD FTP open SCRIPT
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Mook
●27ポイント

おそらく変更しようとしているパスにスペースが含まれている星ではないかと思います。

ts.WriteLine "cd ""c:\Documents and Settings\AAA"""

のようにパスの前後にダブルコーテーションを入れてあげてはどうでしょうか。


ダブルコーテーション中の連続するダブルコーテーションは、文字列としてのダブルコーテーションを表します(わかりずらいですが)。


あと気になったのはが全角になっていました。

◎質問者からの返答

ちょっと質問文が悪かったかと思います。

¥(全角)はわざとしましたが、要は"cd c:/AAA"です。cdとcの間以外は余計なスペースはありません。


確かcdはカレントディレクトリを移動する時に指定するものだと記憶にありますが、要は相対パスは指定できるのか?もしできるとしたら、どういう指定の仕方をすればいいかということです。

その程度のレベルです。


いろいろ自分でやってみてもうまくエラーになるだけでした。

もしよろしかったら、再度回答をお願いします。


2 ● Mook
●100ポイント ベストアンサー

もしかしたら、先ほどの回答は少し質問を読み違えたでしょうか。

先ほどの回答は、任意のパスを指定するための方法です。


ドライブも含めてパスを変更したい場合は、

 "cd /D ""D:\Data\FTP"""

とすれば出来ます(余計なことですが、せっかくの回答なので御参考まで)。


本題ですが、カレントフォルダで実行するには、CD の行を削除するだけで良いかと思います。


デフォルトのパスは、スクリプトのある場所になるので、

ftp_aaa.prm も ftp_aaa.log もスクリプトと同じ場所でよければ、それで出来ると思います。


蛇足ですが、先ほどの回答での誤変換失礼しました。

× 含まれている

○ 含まれているせい

◎質問者からの返答

早速ありがとうございます。

>カレントフォルダで実行するには、CD の行を削除するだけで良いかと思います。

やっぱりまずはそう考えますよね。昨日やってみた時はうまくいかなかったような・・・。


今はちゃんとアップロードできる環境ではないのですが試しに実行してみたら、Not connected.だったけど、エラーにならずに無事終了した・・・。

明日午後に試してみますね。


3 ● garyo
●26ポイント

まず、現状は

1.C:\AAAのフォルダの中に「○○.vbs」,「ftp_aaa.prm」,「uploadする対象のファイル」があり「○○.vbs」を実行すると「ftp_aaa.log」が作成される

だと思います。

これをどのように変更したいのでしょうか?

1.任意のフォルダに「○○.vbs」,「ftp_aaa.prm」,「uploadする対象のファイル」を移動したい。

→この場合は2番の回答で問題ないと思います。

2.任意のフォルダに「○○.vbs」を移動し,「ftp_aaa.prm」,「uploadする対象のファイル」はc:\AAAのまま実行したい。

→この場合は

ts.WriteLine "cd c:¥AAA"←削除

ts.WriteLine "FTP -sc:¥AAA\ftp_aaa.prm > c:¥AAA\ftp_aaa.log"

で良いのではないでしょうか。

また「どうしてもバッチファイル実行時にエラーとなってしまいます。」このときのエラーメッセージを書くと解決が早いと思います。

◎質問者からの返答

現状はその通りです。

元のvbsは問題なく動きます。


変更したいこと

→1.です。

このvbsを他の人に渡して、任意のフォルダで実行、その人の持つファイルをアップロードしてもらうことです。

その際に作成されるprmやlogはvbsと同じフォルダです。

今日、「ts.WriteLine "cd c:¥AAA"」の部分を削除して実行してみました。

Mookさんのコメントにもありましたので、全文とエラーを書きます。

元のvbsからフォルダ指定を消して、ID・パスワード・ディレクトリ・ファイル名を変えてあります。

Set objWS = WScript.CreateObject("WScript.Shell")

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

Set objFS = WScript.CreateObject("Scripting.FileSystemObject")

Set objXL = WScript.CreateObject("excel.Application")

Set ts = objFS.OpenTextFile("ftp_aaa.bat",2,true)

ts.WriteLine "FTP -s:ftp_aaa.prm > ftp_aaa.log"

ts.WriteLine "bye"

ts.Close

do

FileName = objXL.GetOpenFilename(,,"Uploadファイル選択",,true)

If IsArray(FileName) Then

Set ts = objFS.OpenTextFile("ftp_aaa.prm",2,true)

ts.WriteLine "open 44.555.33.66" ←IPアドレス

ts.WriteLine "FTPID" ←ID

ts.WriteLine "FTPPW" ←パスワード

ts.Writeline "cd AAADIR" ←アップロード先のサーバーのディレクトリ

For i = 1 To UBound(FileName)

ts.WriteLine "put " & FileName(i)

Next

ts.WriteLine "bye"

ts.Close

Ans = Msgbox(UBound(FileName) & "件のデータをUploadします。",vbOkCancel,"○○データUpload")

If Ans = vbOk Then

objWS.run "ftp_aaa.bat",0,true

Ans = Msgbox("データのUpload完了しました。" & vbCrLf & "処理を終了しますか?", _

vbOkCancel,"○○データUpload")

If Ans = vbOk Then

Wscript.Quit

End IF

End if

Else

Wscript.Quit

End if

LOOP

出たエラーメッセージの内容は

スクリプト:c:\test\○○データUpload.vbs

行:24

文字:12

エラー:処理を待つことができません。

コード:80020009

ソース:WshShell.Run

okを押すと、webブラウザにてメッセージ表示。

プロキシ サーバーがフルアクセスできない設定にされていないため、

フォルダ'ftp://aaa.bat/'は読み取り専用です。


ファイルを移動、貼り付け、名前の変更、または削除するには、

別のプロキシを設定する必要があります。

プロキシの変更の詳細については、システム管理者に問合せてください。


すいません。お手数かけますが、よろしくお願いします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ