コマンドプロンプトからのcmd実行について

このQ&Aのポイント
  • VBSでオブジェクトを定義し、cmd経由で他のバッチ・VBS・ソフトを起動しているが、特定のパスが実行できない問題が発生している。
  • コマンドプロンプトで個別に実行しても同様の問題が発生しており、記号が混じると処理できないことが分かった。
  • 処理できない理由と回避策について解決方法を探している。
回答を見る
  • ベストアンサー

コマンドプロンプトからのcmd実行について

現在VBSでオブジェクトを定義しrunを使いcmd経由で他のバッチ・VBS・ソフトの起動をやっています。 ふととあるパスが実行できませんでした。 そこで別途個別にコマンドプロンプトだけで実行してみましたがやはりうまく処理できません。 [echo.bat] echo test pause [コマンドプロンプト] rem その1 cmd /K c:\temp\a\echo.bat rem その2 cmd /K C:\Temp\(a\echo.bat その1の結果 C:>cmd /K C:\Temp\a\echo.bat C:>echo test test C:>pause 続行するには何かキーを押してください . . . その2の結果 C:>cmd /K C:\Temp\(a\echo.bat 'C:\Temp\' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 C:> 上記のように1は正常に処理され2はうまく処理されません。 解決策をひたすら検索したのですが見つからず なんとなくだいたい分かったのが一部『(』や『)』や『&』や『@』や『^』などの記号が混じるとどうやらうまく処理できないようです。 なぜ処理できないのか?と、如何すればこれを回避して実行できるか分かる方がいればよろしくお願いします。 備考: (現状の緊急回避として記号のあるパスは記号のないパスから経由batを生成する方法を思いつきましたが自分で馬鹿だと思います) (経由バッチの中身が"C:\Temp\(a\echo.bat"ならば実行できるから) また、cmd /K "C:\Temp\(a\echo.bat" では実行できませんでした。 OSはXPです。コマンドプロンプトヴァージョンは(Microsoft Windows XP [Version 5.1.2600])です

質問者が選んだベストアンサー

  • ベストアンサー
  • saru_
  • ベストアンサー率39% (38/97)
回答No.3

No.1さんの回答に賛成です。 将来的に禍根になりうる要素は極力排除するのが、生産性の高い開発ではないでしょうか? 仮に顧客からの要望であったとしても、説得を試みるべきだと思います。 ちなみに、  cmd /K C:\Temp\"(a"\echo.bat で、うまくいくようですが、これ以外にも、不測の不具合が起こりえるというのが、問題の本質だと思います。

argument
質問者

お礼

なるほどこの個別で囲む記述はとても参考になりました。 確かに基本命名規則にこういう爆弾がそもそも入力できるのもまぁ問題ではありますね。 Documents and Settingsなんてスペースの入るパスがよく使われるデスクトップパスの一部と言うのもコマンドプロンプト問題になり易いのでそれOS自体まぁ考え所ではあります・・・。 今回は顧客等は絡みではありませんでしたがこれは思いのほか重要度の高い問題ですね。 回答本当にありがとうございました。精進します。

その他の回答 (2)

  • kenji_aki
  • ベストアンサー率50% (29/58)
回答No.2

まったくのあてずっぽうですが、"("の前に"^"を入れてみてはどうでしょう?

argument
質問者

お礼

回答ありがとうございます。 実は検索しまくった同様。エスケープできないものかと色々ためしたなかに^も既にためしてだめでした。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

>なぜ処理できないのか? そもそもファイル名に(略) 括弧なんて危険の代表格。 どうしても括弧を使いたい、括弧でなければだめ というのがそもそも誤り。 要するにファイル名を変えようね って事。

argument
質問者

お礼

回答ありがとうございました。 『(』や『)』や『&』や『@』や『^』等のなかで半角括弧は出現確立が高くたとえばフォルダコピー時に『コピー (2) ~ 』となる様に本件では危険意識が少々低めでした。

関連するQ&A

  • バッチファイルについて

    @cmd /k 上記の内容で「a.bat」というファイル名で保存しました。 この保存したファイルをダブルクリックすると、バッチファイルが格納されてるフォルダのパスがコマンドプロンプト上に表示されます。 パス表示後に、いろいろな動作(「echo~」など)を実行したいと思っているんですが、うまくいきません。 どうやら一番上の「@~」を記述したものは、そのあとに「echo~」などを記述しても実行してくれないみたいです。 「@cmd /k」実行後に何か(「echo~」など)を実行するにはどうしたらいいですか?

  • コマンドプロンプトのFOR文がダブルクリックで実行できない

    お世話になります。 まず当方の環境は以下になります。 OS:Windows XP Pro SP2 C:\tempにtest.batというバッチファイルを作成し以下を記述しました。 FOR /F "usebackq delims==" %%i IN (`set`) DO @echo %%i で、このtest.batをダブルクリックすると実行できないんです。 ただしコマンドプロンプトからでは問題なく実行できます。 また別PCではダブルクリック&コマンドプロンプトで問題なく実行できます。 どのようにすれば解決できるのかわからずに困っております。 どなたかアドバイスお願いできますでしょうか。

  • コマンドプロンプトのFOR文がダブルクリックで実行できない。

    コマンドプロンプトのFOR文がダブルクリックで実行できない。 お世話になります。 まず当方の環境は以下になります。 OS:Windows XP Pro SP2 C:\tempにtest.batというバッチファイルを作成し以下を記述しました。 FOR /F "usebackq delims==" %%i IN (`set`) DO @echo %%i で、このtest.batをダブルクリックすると実行できないんです。 ただしコマンドプロンプトからでは問題なく実行できます。 また別PCではダブルクリック&コマンドプロンプトで問題なく実行できます。 どのようにすれば解決できるのかわからずに困っております。 どなたかアドバイスお願いできますでしょうか。

  • batファイルの実行について

    batファイルを作成しました。 (ATコマンドにてスケジュールさせたいと考えてます。) ファイル自体をダブルクリックで実行すると正常に処理が完了しますが、コマンドプロンプトから実行しようとすると以下のエラーが発生します。 〓〓〓〓〓〓〓〓〓〓〓〓 C:\>cmd /c "E:\MirroringTool\SimpleFolderMirror\test.bat" 指定した名前は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されません。 〓〓〓〓〓〓〓〓〓〓〓〓 実行させたいbatファイルは以下のとおりです。 〓〓〓〓〓〓〓〓〓〓〓〓 echo off cls rem ↓SimpleFolderMirror.exeを解凍したフォルダ SET EXEFOLDER_PATH="E:\MirroringTool\SimpleFolderMirror\" rem ↓ログの出力フォルダ・ファイル SET LOG_DIR="E:\MirroringTool\SimpleFolderMirror\logs\" rem ↓ミラー元フォルダ1 SET COPY_FROM_PATH_01="S:\" rem ↓ミラー先フォルダ1 SET COPY_TO_PATH_01="E:\ORANT\OWS" cd %EXEFOLDER_PATH% SimpleFolderMirror.exe %COPY_FROM_PATH_01% %COPY_TO_PATH_01% > %LOG_DIR%logs.txt 〓〓〓〓〓〓〓〓〓〓〓〓 cd %EXEFOLDER_PATH%のところまでは処理は完了しているようなので、最後の行のところで発生しているようです。 何が原因でエラーが発生してしまっているのでしょうか? 宜しくお願い致します

  • コマンドプロンプトのバッチファイル実行までの速度

    コマンドプロンプトのバッチファイルを作成したのですが このバッチファイルの実行するまでの処理速度を、コマンドプロンプト上に表示させたいのですが、どのようなコマンドを組めばよいのでしょうか? ちなみにバッチファイルの中身は、 @echo off start http://www.yahoo.co.jp です。よろしくおねがいします。

  • cmdの起動時におけるバッチスクリプトの自動実行

    こんにちは。 OSは現在、64bit版のWindows7を使っています。 コマンドプトンプト(C:\Windows\System32\cmd.exe)の実行時に、 自動で実行するバッチスクリプトを設定するには、 レジストリキーの HKEY_CURRENT_USER\Software\Microsoft\Command Processor に、AutoRunという文字列値を作成し、そのデータに、バッチスクリプトのパスを記述します。 以前までこの方法で、 C:\Users\kei\cmdprofile.bat というバッチスクリプトが、コマンドプロンプトの起動時に呼び出されるように設定していました。 最近、これを実行しないようにしようと思い、 HKEY_CURRENT_USER\Software\Microsoft\Command Processor に、AutoRunという文字列値を削除しました。 ところが、依然と同じように、C:\Users\kei\cmdprofile.batが、コマンドプロンプトが起動する度に実行されてしまいます。 そこで、バッチスクリプトの名前をprofile.batに変更してコマンドプロンプトを起動させた所、 「C:\Users\kei\cmdprofile.bat は存在しない」 といったエラーメッセージが表示されました。 どうやら、C:\Users\kei\cmdprofile.batを自動実行する設定が解除されていないようなんです。 一体どうすれば、このバッチスクリプトの自動実行を解除する事ができるのでしょうか? 何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。 では、よろしくお願い致します。

  • コマンドプロンプトからファイル実行について

    コマンドプロンプト初心者です。 説明が下手で申し訳ありませんが、コマンドプロンプトを起動し、C:\Program Filesから辿ってファイルを実行させようとすると、 C:\Programは、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と表示され、できなくて困っております。 パスがないのかなと思い、試行錯誤してみましたがダメでした。 あとDOS窓はコマンドプロンプトのことですよね?

  • cmdコマンドが実行できない

    ファイル名を指定して実行のCMDコマンドが実行できません。一瞬黒い画面が出るのですが、それだけです。 アクセサリーのコマンドプロンプトをクリックしても同じ結果です。 対策を教えて下さい。よろしくお願いします。

  • VBAでコマンドプロンプトを呼び出す記述で

    やりたいことはVBAからコマンドプロンプトにてBCP.EXEを呼び出してSQL文を実行することです。 コマンドプロンプトで直接打つと以下のようなコマンドになります。SQL文は長いので省略しました。 ************************* "c:\WINNT\system32\cmd.exe /k" "C:\Program Files\Microsoft SQL Server\80\Tools\Binn\bcp.exe " "SQL文" ************************* これをVBAで以下のように記述しました。 ////////////////////////////////////////////////// stAppName = "c:\WINNT\system32\cmd.exe /k" stAppName = stAppName & "C:\Program Files\Microsoft SQL Server\80\Tools\Binn\bcp.exe " stAppName = stAppName & "SQL文" Call Shell(stAppName, 1) ///////////////////////////////////////////////// 上のような記述だとコマンドプロンプトでは パスのダブクォテーションがなくなり ************************* c:\WINNT\system32\cmd.exe /k C:\Program Files\Microsoft SQL Server\80\Tools\Binn\bcp.exe ”SQL文” ************************* のように実行されBCP.exeのパスが通らず以下のエラーになります。 ///////////////////////////////////////////////// 内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 ///////////////////////////////////////////////// どなたかVBAでコマンドのパスにダブルクォテーションをつける方法を教えてください。

  • windows2000でのコマンドプロンプトの別ユーザー実行について

    こんにちは。 Windows2000で、コマンドを別ユーザー権限で実行したいと考えています。 以下のやり方だとうまくいきませんが、何かいい方法はないでしょうか? 1、.bat or .cmd ファイルにして、SHIFT+右クリックで別ユーザー実行をしたい × .batと.cmdでは別ユーザー実行がでない(表示されない) 2、コマンドプロンプト内で、runasを使用してユーザー権限を変更する。 x これはどうもWindows2000には対応していない? 上記のように作業なかんじで作業がうまくいきません。 現状は、コマンドプロンプトを右クリック別ユーザー実行で立ち上げた後 コマンドプロンプト内にいれたかったものをテキストに貼り付けておいて、コピーペイストが一番シンプルで確実かなと思っている次第です。 よりよい方法はないでしょうか?よろしくお願い致します。