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行目を直す必要があると思うのですが、どうしてもバッチファイル実行時にエラーとなってしまいます。
急に必要になって、ろくに勉強せずにやろうとしているので、基本的な知識が欠落しているのだろうとは思います。
どうかよろしくお願いします。
もしかしたら、先ほどの回答は少し質問を読み違えたでしょうか。
先ほどの回答は、任意のパスを指定するための方法です。
ドライブも含めてパスを変更したい場合は、
"cd /D ""D:\Data\FTP"""
とすれば出来ます(余計なことですが、せっかくの回答なので御参考まで)。
本題ですが、カレントフォルダで実行するには、CD の行を削除するだけで良いかと思います。
デフォルトのパスは、スクリプトのある場所になるので、
ftp_aaa.prm も ftp_aaa.log もスクリプトと同じ場所でよければ、それで出来ると思います。
蛇足ですが、先ほどの回答での誤変換失礼しました。
× 含まれている星
○ 含まれているせい
おそらく変更しようとしているパスにスペースが含まれている星ではないかと思います。
ts.WriteLine "cd ""c:\Documents and Settings\AAA"""
のようにパスの前後にダブルコーテーションを入れてあげてはどうでしょうか。
ダブルコーテーション中の連続するダブルコーテーションは、文字列としてのダブルコーテーションを表します(わかりずらいですが)。
あと気になったのは¥が全角になっていました。
ちょっと質問文が悪かったかと思います。
¥(全角)はわざとしましたが、要は"cd c:/AAA"です。cdとcの間以外は余計なスペースはありません。
確かcdはカレントディレクトリを移動する時に指定するものだと記憶にありますが、要は相対パスは指定できるのか?もしできるとしたら、どういう指定の仕方をすればいいかということです。
その程度のレベルです。
いろいろ自分でやってみてもうまくエラーになるだけでした。
もしよろしかったら、再度回答をお願いします。
もしかしたら、先ほどの回答は少し質問を読み違えたでしょうか。
先ほどの回答は、任意のパスを指定するための方法です。
ドライブも含めてパスを変更したい場合は、
"cd /D ""D:\Data\FTP"""
とすれば出来ます(余計なことですが、せっかくの回答なので御参考まで)。
本題ですが、カレントフォルダで実行するには、CD の行を削除するだけで良いかと思います。
デフォルトのパスは、スクリプトのある場所になるので、
ftp_aaa.prm も ftp_aaa.log もスクリプトと同じ場所でよければ、それで出来ると思います。
蛇足ですが、先ほどの回答での誤変換失礼しました。
× 含まれている星
○ 含まれているせい
早速ありがとうございます。
>カレントフォルダで実行するには、CD の行を削除するだけで良いかと思います。
やっぱりまずはそう考えますよね。昨日やってみた時はうまくいかなかったような・・・。
今はちゃんとアップロードできる環境ではないのですが試しに実行してみたら、Not connected.だったけど、エラーにならずに無事終了した・・・。
明日午後に試してみますね。
まず、現状は
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/'は読み取り専用です。
ファイルを移動、貼り付け、名前の変更、または削除するには、
別のプロキシを設定する必要があります。
プロキシの変更の詳細については、システム管理者に問合せてください。
すいません。お手数かけますが、よろしくお願いします。
早速ありがとうございます。
>カレントフォルダで実行するには、CD の行を削除するだけで良いかと思います。
やっぱりまずはそう考えますよね。昨日やってみた時はうまくいかなかったような・・・。
今はちゃんとアップロードできる環境ではないのですが試しに実行してみたら、Not connected.だったけど、エラーにならずに無事終了した・・・。
明日午後に試してみますね。