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

質問
-
初めて問い合わせをさせていただきますので、失礼等がありましたらご容赦願います。
「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 /?
引用符が必要な特別な文字は次のとおりです:
<スペース>
&()[]{}^=;!'+,`~
- 回答の候補に設定 栗下 望Microsoft employee 2017年5月15日 4:34
- 編集済み ウィンドウズスクリプトプログラマ 2017年5月15日 12:52 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:46 /?
- 回答の候補に設定 栗下 望Microsoft employee 2017年5月18日 1:40
2017年5月15日 12:27 -
© ウィンドウズスクリプトプログラマ - Windows Script Programmer 2017
フォルダ名に特定の文字があると、コマンドプロンプトが一瞬で閉じてしまいます。
デバッグできるように
エラーを見ることもできません。
%SystemRoot%\System32\cmd.exe /K "%1" %*
set /?
%CMDCMDLINE% - コマンド プロセッサを起動したオリジナル コマンド ライン
なので
に展開します。
echo %CMDCMDLINE%
で調べる。
- 回答の候補に設定 栗下 望Microsoft employee 2017年5月18日 1:40
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:26 ,
- 回答の候補に設定 栗下 望Microsoft employee 2017年5月18日 1:40
2017年5月15日 13:25