• 締切済み

VBのshellについて。

すみません。教えてください。 環境OS:winXP ソフト:VB6.0 sp5 内容:shellを利用してbatファイルをキックさせようとしていますがうまくいかないのです。 --VBソース-- Str = "C:\program file\SOFT\test.bat" & "/w" nR = shell(Str,1) -- batファイルの中身-- @echo dir %1 > "C:\Program File\SOFT\log.txt" 以上のデータなのですが、EXEを作成し、Shellを起動するとエラーが帰ります。 確認したところ、windows2000では問題ないのですが、XPではProgram Fileのスペースが問題で、エラーになってしまうのです。 教えていただきたいのは、 1.本当にXPではスペースのあるディレクトリ名はエラーになるのかということ。 2.もしエラーになるのであれば、対応策。 の上記の2点を教えてくださいませ。 いろいろ試し、探しているのですが、なかなか見つからず困っています。 XPのみできないっていうのも半信半疑だし・・・・ お願いします。

みんなの回答

回答No.2

Str = """C:\program file\SOFT\test.bat""" & "/w" のように "" で囲まないとうまく実行できないようですね。( Debug.Print Str で見たとき、"" で囲まれているという意味です。) あと、"Program File" じゃなくて "Program Files" ですよね?

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

え~、詳しくは忘れたが、Windows 2000の頃、コマンド中にスペースが入っていたら一旦そこで区切ってEXEだと仮定して起動を試行し、だめだったら次のところまで延ばして最後まで試す、という動きをしていた、XPではどうも無いっぽいね。詳しく試したわけではないので違うかも。 もしWindows2000でも大丈夫なようなら最初から"で括っちゃえ。 """C:\program file\SOFT\test.bat"" /w" 例によって試してません。

関連するQ&A

  • SHELLコマンドがうまく動かないです VB6.0

    Shell("C:\aaa.bat")と書くと動くのに BBB(H$)というフォルダにBATファイルを移動して Shell("C:\BBB(H$)\aaa.bat")と書くと 動きません。 ()がいけないのでしょうか?(>_<) 何が疑問かと言うと、前まで動いていたような 気がするからです。 どなたかおしえてください。

  • shell関数について

    毎度、お世話になっています。 現在、C言語で書いた複数のプログラムをBATファイルで処理するように記述しています。VBでその制御を行っているのですが、VBの処理手順として子フォーム(textあり)にデータを書きこんで、ボタンを押すとshellでbatファイルを起動し、バッチファイルの結果として、あるディレクトリにresult.txtが作成され、VBで他の子フォームに読みとらせようとしているのですが、shellだと、実行の終了を待たずに次にいってしまうので、そのバッチファイルの実行処理が終わらず、result.txtの内容を読み込むことができません。 待つようにするにはどうすればよいのでしょうか? ちなみにVBは一週間前にはじめて、自分でも調べてなんとか作ろうとしたのですが、時間がないため、ここに質問させていただきました。なるべく簡単なアルゴリズムで、よろしくお願いします。 VBのプロセス    テキストにデータを書き込む      ↓     ボタン   →        テキストの内容を*.txtとして保存                        ↓                      バッチファイル起動    ↓(ここで右の実行を待たない     ↓     ので読み込むことができない)   C言語で書かれたプログラム実行                        ↓ result.txtを    ←        結果としてresult.txtが出来上がる 読み込んで表示     

  • VB6.0 Shellによる終了監視について

    VB6.0について困っております。 VB6.0にてファイル管理ソフトを開発しています。VBより他アプリ(MS OfficeやAutoCAD等)ファイルを起動させ、終了を監視(終了処理実行のため)しています。 具体的にはWshのshell.Runコマンドを使用して wsh.run("アプリ",NormalFocus,True)として起動させています。 ここで、複数ファイルを起動した場合、最後に起動したファイルが終了しないと、他の終了が検知できません。 例) ファイルAを起動 ファイルBを起動 ファイルCを起動 ファイルDを起動 ↓ ファイルAを終了 ←終了しても終了検知しない ファイルBを終了 ←終了しても終了検知しない ファイルCを終了 ←終了しても終了検知しない ファイルDを終了 ←終了するとA・B・C・Dの終了をまとめて検知し終了処理実行 これを、各ファイルごとに終了を検知させる方法はありませんでしょうか? よろしくお願い致します。

  • Shell関数はOSに依存?

    現在VB4からVB6へのコンバージョン作業を行っています。 その際、 VB4→Windows98 VB6→Windows2000XP と、異なるOSを使用しています。 VB6の環境では、Shell関数を使用してMS-DOS バッチ ファイルの起動を行えるのですが、VB4の環境では同じコーディングでもバッチファイルが起動しない&エラーが出力されませんでした。 現在はVB4の環境をWindows95へ移す事で問題を回避したのですが (VB4の環境は比較テストに使用するだけでしたので) 98だから使えないと言うのも気持ちが悪く、質問させていただきました。 どなたかShell関数の上記点への対応策等ご存知でしたらご教授願います。

  • VBでバッチ呼び出し

    VB2008でボタン(btn1)をクリックすると、C:\abc.batを呼び出し、batに書かれている命令を実行させたいと思っています。 ネットで探したところ、VBAでは下記のURLにあるようにすればできるっぽいのはわかりました。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1320106183 Set objShell = WScript.CreateObject("WScript.Shell") objShell.Run "D:\test02.bat" ただ、VBではどのように実行すればよいかわかりません。ご教授お願いいたします。

  • Shellの使い方について

    VBを最近はじめたのですが、Shellがうまくいかず、困っています。 下記のような内容で、MS-DOS上で動作するプログラムをShellで呼び出していますが、ファイルが見つからないというエラーが出てしまいます。(<D:\kakasi\401.txt:No such file or directory) com1 = "kakasi.exe " + param + " <" + lbl_open_file + " > " + lbl_save_file retval = Shell(com1, vbNormalFocus) kakasi.exeには、パスが通してありますので、lbl_open_fileやlbl_save_fileのファイルが見つからないと思われます。 実行時のcom1の値は、kakasi.exe -Jk -Hk -Kk <D:\kakasi\401.txt > D:\kakasi\401.txt1 になっていて、DOSプロンプトから手入力、実行ではうまくいきます。 何が問題なのか分かる方、教えてください。 よろしくお願いします。

  • VBでプロンプトの終了を知るには?

    はじめまして。現在VBの勉強中です。 ちょっと行き詰まっています。 よろしければ教えてください。 現在、VBでバッチをたたいてエクスポートするプログラムを作成しています。 エクスポートしている間(プロンプトが開いて処理をしている間)は、 VBを終了したくないのですが、以下のようなプログラムだと、 VBが先に終了してしまい、プロンプトだけが残されてしまいます。 Shell "C:\Test.bat", vbNormalFocus End プロンプトを非表示にしたいわけではなく、プロンプトが終了してから VBを終わらせたいのです。 何か方法があれば教えてください。 よろしくお願いいたします。

  • Shellで起動したプログラムのウィンドウ表示位置

    vbからshellを使って、cで書いた実行ファイルを起動しています。 その起動した実行ファイルの表示位置を指定したいのですが、どうしたらよいのかわかりません。 もしかしてshellでは無理なのでしょうか? それともcのコードに変更を加えるべきなのでしょうか? cの方はOpenCVで、ウィンドウ生成が「cvNamedWindow(windowName名前)」で行っているので、 これもどう位置を指定したらよいのかわかりません。。。 どなたかわかる方よろしくお願いします。

  • VBでShell○なのにShellExecute×

    http://support.microsoft.com/kb/170918/ja 等を参考に、コンソールアプリからHTMLファイルを呼び出すだけのEXEをVB(Visual Basic 2008 Express Edition)で作ったところ、 Shell関数ではHTMLがIEで起動されるのに対し、ShellExecute関数ではダメでした。 HTMLへのファイルパスが正しいことはMsgBoxで確認しました。 また、ほぼ同じソースをbasにしてExcelから起動すると、ShellExecuteでも起動しました。 以下がソース(抜粋)になりますが、原因が分かる方がおられましたら、ヒントだけでも、ご教示いただけると幸いです。 よろしくお願いいたします。 - - - - - - - - - - - - - - - - - - - - - - Option Explicit On Module Module1 Private Declare Function ShellExecute Lib "shell32.dll" Alias _ "ShellExecuteA" (ByVal hwnd As Long, ByVal lpszOp As _ String, ByVal lpszFile As String, ByVal lpszParams As String, _ ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long Private Declare Function GetDesktopWindow Lib "user32" () As Long 'エラーコード宣言略 Function StartDoc(ByVal DocName As String) As Long Dim Scr_hDC As Long Scr_hDC = GetDesktopWindow() 'こちらだと成功 StartDoc = Shell("explorer.exe" & " " & DocName, vbNormalFocus) StartDoc = ShellExecute(Scr_hDC, "Open", DocName, _ "", "C:\", SW_SHOWNORMAL) End Function Sub Main() Dim r As Long, msg As String r = StartDoc(CurDir() & "\target.html") 'エラーハンドリング省略 End Sub End Module

  • VB6.0 + Windows 2003環境下でのShell関数の使用

    現在、VB6.0を利用してプログラムを作成しています。 プログラム中からShell関数を利用してexeファイルを起動しようとしているのですが、exeファイルが起動しません。 実行環境OSがWindowsXPの場合は正常に起動するのですが、Windows2003で同じように実行したさい、exeファイルが起動しないのです。 イベントビューアのアプリケーションログを調べたところ、VBRuntimeエラーが発生していました。 エラー内容は、「実行時エラー'91'オブジェクト変数または With ブロック変数が設定されていません。」です。 VBRuntimeのバージョンは6.0.97.82です。 何か原因・解決策が分かる方いましたら ご協力お願いします。

専門家に質問してみよう