locked
VBScroptから管理者権限でBATファイルを呼び出すスクリプトで謎の事象 RRS feed

  • 質問

  • 初めて問い合わせをさせていただきますので、失礼等がありましたらご容赦願います。

    「VBScroptから管理者権限でBATファイルを呼び出すスクリプト」を書きました。

    内容は以下の通りです。

    -----Start CallBAT.vbs-----

    Dim SAo
    Set SAo = CreateObject("Shell.Application")
    SAo.ShellExecute "Correct.cmd", , , "runas", 1

    -----End CallBAT.vbs-----

    -----Start Correct.cmd-----

    pause

    -----End Correct.cmd-----

    このコマンドそのものは問題なく動くのですが、

    この二つのファイルをフォルダに入れて実行しようとしたとき、

    フォルダ名に特定の文字があると、コマンドプロンプトが一瞬で閉じてしまいます。
    エラーを見ることもできません。

    特定の文字は以下の通りです。

    試した記号:!#$%&'()-=^~@`;+[{]},._
    あっても問題のない記号:!#$% ' )-  ~@` +[{]} ._
    あると問題が起きる記号:&(=^;,

    これはWindowsの仕様でしょうか、それとも回避策があるのでしょうか。

    2017年5月11日 2:01

すべての返信

  • © ウィンドウズスクリプトプログラマ - Windows Script Programmer 2017
    cmd.exeのコマンドラインでは、cmd.exeの構文用文字はエスケープする必要がある。それらがパス名に使われているなら"パス名"でエスケープする。それでエスケープできない文字もある。%環境変数%は無理。

    cmd /?
    引用符が必要な特別な文字は次のとおりです:
         <スペース>
         &()[]{}^=;!'+,`~


    2017年5月12日 15:30
  • © ウィンドウズスクリプトプログラマ - Windows Script Programmer 2017
    通常、
    HKEY_CLASSES_ROOT\cmdfile\shell\runas\command
    は、(batfileも同様)
    %SystemRoot%\System32\cmd.exe /C "%1" %*
    になってるようですが、これは問題で、私は
    %SystemRoot%\System32\cmd.exe /S /C ""%1" %*"
    こうしています。なぜかは、cmd /?で、/sをよく読む。ややこしい、変な仕様です。
    2017年5月15日 12:27
  • © ウィンドウズスクリプトプログラマ - Windows Script Programmer 2017
    フォルダ名に特定の文字があると、コマンドプロンプトが一瞬で閉じてしまいます。
    エラーを見ることもできません。
    デバッグできるように
    %SystemRoot%\System32\cmd.exe /K "%1" %*

    set /?
    %CMDCMDLINE%    - コマンド プロセッサを起動したオリジナル コマンド ライン
                        に展開します。
    なので
    echo %CMDCMDLINE%
    で調べる。


    2017年5月15日 12:50
  • © ウィンドウズスクリプトプログラマ - Windows Script Programmer 2017
    関連付けを変えないなら、
    SAo.ShellExecute "c:\wimdows\system32\cmd.exe","/S /C """"フルパス\Correct.cmd""""", , "runas", 1
    かな。

    2017年5月15日 13:25