こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

コマンドプロンプトからの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])です

投稿日時 - 2008-09-08 14:41:21

QNo.4312988

すぐに回答ほしいです

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

No.1さんの回答に賛成です。
将来的に禍根になりうる要素は極力排除するのが、生産性の高い開発ではないでしょうか?
仮に顧客からの要望であったとしても、説得を試みるべきだと思います。

ちなみに、
 cmd /K C:\Temp\"(a"\echo.bat
で、うまくいくようですが、これ以外にも、不測の不具合が起こりえるというのが、問題の本質だと思います。

投稿日時 - 2008-09-08 15:47:04

お礼

なるほどこの個別で囲む記述はとても参考になりました。

確かに基本命名規則にこういう爆弾がそもそも入力できるのもまぁ問題ではありますね。
Documents and Settingsなんてスペースの入るパスがよく使われるデスクトップパスの一部と言うのもコマンドプロンプト問題になり易いのでそれOS自体まぁ考え所ではあります・・・。

今回は顧客等は絡みではありませんでしたがこれは思いのほか重要度の高い問題ですね。

回答本当にありがとうございました。精進します。

投稿日時 - 2008-09-08 23:21:01

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

投稿日時 - 2008-09-08 15:05:58

お礼

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

投稿日時 - 2008-09-08 23:24:59

ANo.1

>なぜ処理できないのか?
そもそもファイル名に(略)

括弧なんて危険の代表格。
どうしても括弧を使いたい、括弧でなければだめ というのがそもそも誤り。


要するにファイル名を変えようね って事。

投稿日時 - 2008-09-08 15:03:52

お礼

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

投稿日時 - 2008-09-08 23:30:57

あなたにオススメの質問