• 締切済み

WSHのエラー対策

いつも参考にさせて頂いております。 当方環境: OS WinXP WSH Version 5.7 現在、WSH+JScript でFTPによるファイル転送のプログラムを作成しております。 ところが、実行させてみると、FTPコマンド実行のところでエラーが発生します。 (IPやコマンドファイルはスクリプト内で取得しています) var ws = WScript.CreateObject("WScript.Shell"); var errCode = ws.Run("ftp -i -s:"+cf+" "+ip_add,0,true); エラーメッセージ:「処理を待つことができません。」 MicrosoftのHPで検索したら、以下の事が分かりました。 「通常このエラーは、あるプロセス (ショートカット リンクの実行など) が完了するまでスクリプトが待機しているときに、そのプロセスが値を返さない場合に発生します。」 色々なHP見ても、大体皆さんFTPコマンドはこのように実行されているんですが、どこが違うのでしょうか? また、このエラーへの対処方法をご存知の方がいらっしゃいましたら、 ご教授下さい。

みんなの回答

  • nas02
  • ベストアンサー率70% (22/31)
回答No.3

iriyakさんと同様に、以下の環境とテストファイルを準備してクライアントから実行してみましたが 特にエラーは出ませんでした。 (「test.dat」を送信して、「test1.dat」で受信し直すといった簡単なサンプルです。) FTPを実行する前にどんなコマンドを実行しているか確認された方がよいです。 また、スクリプト中で動かす内容を実際に手動で実行してみて、どんなエラーが出ているのか 確認された方が解決の早道かも知れません。 ◆テスト環境◆ 【クライアント】  OS:Win XP Pro SP2(WSH v5.6) 【サーバ】  OS:Win 2k ※FTP用アカウントとして、ユーザ名「user1」、パスワード「user1」で作成   更に、FTPの仮想ディレクトリ「/user1」を読み書きOKで作成   (user1でログインすると、ここがカレントディレクトリになります) 【クライアント側に用意して実行】 「c:\temp\test.dat」…送信ファイル(15MB程度のファイル) 「test.ftp」…FTPコマンドファイル(拡張子は適当です) 「test.wsf」…テスト用WSHファイル(FTPサーバのIPアドレスは変更して下さい) ■ test.ftp user1 user1 binary put c:\temp\test.dat test.dat get test.dat c:\temp\test1.dat close quit ■ test.wsf <package> <job ID="TEST_FTP"> <object id="ws" progid="WScript.Shell"/> <script language="JScript"> var cf = "test.ftp"; var ip_add = "xx.xx.xx.xx"; // 環境に合せて変えて下さい var cmd = "ftp -w:8196 -i -s:"+cf+" "+ip_add; ws.Popup(cmd); // 実行内容を確認&手動で実行してみましょう var errCode = ws.Run(cmd,0,true); ws.Popup(errCode); </script> </job> </package>

mocajaba
質問者

お礼

回答ありがとうございます。 やはりエラーになりませんか…。 色々と試行錯誤をしておりましたところ、 Run を Excec に変えたらエラーが出なくなりました。 やってることは同じなんですが…不思議です。

  • iriyak
  • ベストアンサー率48% (40/82)
回答No.2

こんにちは。 wscript.exe test.js で試してみましたが、特にそのような状況に遭遇していません。s オプションで与えるスクリプトファイルの最後の quit コマンドを除いてしばらく待たせてから quit とマニュアルでタイプして終わらせたら、finished と表示されました。再現できる条件を共有できると別のサジェッションができるかもしれません。 ■ test.js (コマンドプロンプトを表示させました) var ws = WScript.CreateObject("WScript.Shell"); var errCode = ws.Run("ftp.exe -i -s:c:\\scr.txt", 1 , true); WScript.echo('finished');

mocajaba
質問者

お礼

回答ありがとうございます。 うーん、エラーは出ませんか。 もう少し頭を絞ってみます。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Runメソッドに与えているftpを ftp.exe としてみてはいかがですか 実行時のフォルダーなどに『ftp.lnk』など予期しないファイルが存在したりしませんか

mocajaba
質問者

お礼

早速の回答ありがとうございます。 ftp.exe に変えてもやはり同じでした。 実行時のフォルダ内に「ftp」がつくファイルは存在していません。

関連するQ&A

  • WSHでシャットダウン

    WSH(JScript)でシャットダウンする方法を教えてください。 OSは2000とXPです。 XPだけなら以下の方法で出来るようですが、 2000で実行するとエラーになってしまいます。 var ws = new ActiveXObject("WScript.Shell"); ws.Run("shutdown -s -f");

  • HTMLにWSHを組み込む

    HTMLにWSHのコードを書く事は可能ですか? たとえば、ページ開くとNotePad.EXEが起動するようにしたいのですが 以下のような書き方をすると WScriptが宣言されていません。 とエラーになります。 <HTML> <HEAD> <TITLE>起動のテスト</TITLE> </HEAD> <meta http-equiv="Content-Script-Type" content="text/JavaScript"> <BODY> <SCRIPT LANGUAGE="JavaScript"> var title = "メモ帳"; var wsh = WScript.CreateObject("WScript.Shell"); wsh.Run( "NotePad.EXE" ); </SCRIPT> </BODY> </HTML> いい案がある方教えてください。

    • ベストアンサー
    • HTML
  • [WSH] ファイルのコピーができない

    こんにちは。 次のようなスクリプトでFTPフォルダにファイルをコピーしようとしたのですが、カレントフォルダにファイルがコピーされてしまうようです。 どうすれば、FTPフォルダにファイルをコピーできるのでしょうか? var objShell = WScript.CreateObject("Shell.Application"); var objFolder = objShell.NameSpace("ftp://user:password@sitename/directory/"); objFolder.CopyHere("C:\\WINNT\\win.ini"); WScript.Sleep(6000); ※下記のページを参考にさせていただき作成しました。http://homepage3.nifty.com/aya_js/wsh/wsh25.htm

  • WSHで他のバッチを呼びその終了を待つ方法

    WSHでプログラミングをしています。 WSHを使う理由はWin上から簡単にメールを送信できるのでとりあえず選択しました。 で、WSHのバッチから、普通のDOSコマンドで記述したバッチを呼んで、そのバッチの結果出力されたログファイルをWSHのバッチでメールに添付して送信したいなどと思っています。 今は var ws = WScript.CreateObject("Wscript.Shell"); ws.run("tmp.bat"); こんな感じで「tmp.bat」という名のDOSコマンドのバッチを呼び出しているのですが、このコマンドは命令発行したらその命令が終了するのを待たず次の命令に進んでしまうようです。 なので、ログ作成とメール送信のタイミングが合わない状態です。 処理待ちする方法を教えてください。よろしくお願いします。

  • wshからexcel操作で,ChDirを使いたい

    はじめて質問をします。  monnomestと申します。 vbaのマクロを実行して、シートを作成するwsh(by jscript)を作成しました。そのシートを保存する際にchrdirで保存場所を明示したいのですが、指定の仕方が分かりません。(wshを置いておくdirectoryにしたい。) ChDirは、エクセルのmethodではないため、以下のようでは、エラーになりますし、 var objXL = WScript.CreateObject("Excel.Application"); objXL.Visible = true; with(objXL){ var tar=workbooks.Open(scriptpath+vba); try{ Run("'"+vba+"'!'"+command+"'"); }catch(e){ } tar.Close(); ChDir("xxxxxxx"); ←  とは出来ない。 } もちろん、wshを使わず、vbaをそのまま立ち上げればこんなことする必要はないのですが、 諸々の事情がありまして、wshで行えれば都合がよいのです。 objectが何なのかが分かれば解決でしょうか。 どなたかご教示いただけますでしょうか。

  • WSH .TargetPath 中の /

    JScript です。 CreateShortcutプロパティのTargetPathを指定する際、 引数など渡す為のコマンドラインを含ませようとする場合 スラッシュを期待するものが実際には¥に置き換わってしまいます。 明示的にスラッシュを指定する事は出来るでしょうか? var objSh = WScript.CreateObject("WScript.Shell"); var sc = objSh.CreateShortcut("C:\\test.lnk"); sc.TargetPath = "C:\\test.exe \/m" など、/m で引数で渡そうとすると WScript.Echoなどでは正しく/mと表示されますが 実際のショートカットでは¥mと表示されてしまいます。 指定する方法はありますでしょうか? あと"C:\\test.exe \”C:\\test.exe\"" などの渡し方もエラーになってしまいます。 どの様に記述すべきでしょうか

  • WSHでのレジストリィ登録

    コマンド"regsvr32 xxx.dll"で実行するレジストリの登録をWindows Script Host(WSH)で実行することは可能でしょうか?

  • WSHでキーボードをフックさせるのは可能か

    WSHでキーボードをフックさせるのは可能か 現在JScriptでコーディングしていますが ALT+ファンクションキー等で特定のスクリプトを実行させたりする事は可能でしょうか? 出来ないのであれば最低限どういったAPI等 実行環境があれば可能でしょうか? またAdministratorレベルで権限が必要になるかも気になります。 セキュリティが結構厳しいのでどっかからソフトを持ってきてランチャーにする等はあまり考えていません

  • WSHスクリプトでブラウザ更新

    教えてください。 WSHスクリプトでブラウザの更新をF5ではなくてControl + Rしたいのです。 Set WshShell = WScript.CreateObject("WScript.Shell") WScript.Sleep 2000 WshShell.AppActivate "テスト" WScript.Sleep 2000 WshShell.SendKeys "^R" WScript.Sleep 2000 WScript.Echo "終了" 最初の一回目の実行時はできるのですが、それ以降更新してくれません。 よろしくお願いいたします。

  • wsh で関数を指定して実行したい

    wsh について質問です。 cscript などを実行する際に 実行する関数を引数によって制御したいのですが、 そうするにはスクリプト内に引数で分岐して関数を呼び分けるコードを 記述するようなやりかたしかないのでしょうか? cscript(wscript) 自体には関数名を指定して それを実行する仕組みはないのでしょうか。 よろしくお願いします。

専門家に質問してみよう