回答編集履歴

2 誤字訂正

otn

otn score 34726

2017/07/05 17:04  投稿

他のプログラムだと正常に実行されますね。
bat/cmdファイルを処理するハンドラのバグじゃないでしょうか。
回避策としては、リンク先を`cmd.exe /c sample.bat "TEST"`で。
#追記
奥深いバグかと思っていましたが、ttyp03さんの回答を見て考えると、CMD.EXEの意外と浅いバグのようです。
```
cmd /c "sample.bat" "AAA"
cmd /c "sample.bat" "TEST"
'sample.bat" "TEST' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
```
レジストリの、`HKEY_CLASSES_ROOT\cmdfile\shell\runas\command`が、`%SystemRoot%\System32\cmd.exe /C "%1" %*`なのですが、これを`%SystemRoot%\System32\cmd.exe /C %1 %*`に変更するとエラーは出ませんでした。が、このままだとパス名に空白を含んだものが管理者として実行することが出来ないので、戻しました。
通常実行の`\open\command`は、`"%1" %*`になっており、これは問題ないです。
おそらく「管理者として実行」の機能は対象が`EXE`である必要があり、そのために`\runas\command`に`cmd.exe /c`を付加したために、上記のバグに引っかかってしまったようです。
最初に回避策を書きましたが、これは`sample.bat`の用に引用符で囲まないでもいいケースだと良いのですが、
`D:\test dir\sample.bat`のようなケースで、空白があるからと引用符で囲むと、同じくエラーになります。
NG `cmd /c "D:\test dir\sample.bat" "TEST"`
OK `cmd /c D:\test^ dir\sample.bat "TEST"`
空白は`^`でエスケープするとOKです。
1 追記

otn

otn score 34726

2017/07/05 17:00  投稿

他のプログラムだと正常に実行されますね。
bat/cmdファイルを処理するハンドラのバグじゃないでしょうか。
回避策としては、リンク先を`cmd.exe /c sample.bat "TEST"`で。
回避策としては、リンク先を`cmd.exe /c sample.bat "TEST"`で。
#追記
奥深いバグかと思っていましたが、ttyp03さんの回答を見て考えると、CMD.EXEの意外と浅いバグのようです。
```
cmd /c "sample.bat" "AAA"
'sample.bat" "TEST' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
```
レジストリの、`HKEY_CLASSES_ROOT\cmdfile\shell\runas\command`が、`%SystemRoot%\System32\cmd.exe /C "%1" %*`なのですが、これを`%SystemRoot%\System32\cmd.exe /C %1 %*`に変更するとエラーは出ませんでした。が、このままだとパス名に空白を含んだものが管理者として実行することが出来ないので、戻しました。
通常実行の`\open\command`は、`"%1" %*`になっており、これは問題ないです。
おそらく「管理者として実行」の機能は対象が`EXE`である必要があり、そのために`\runas\command`に`cmd.exe /c`を付加したために、上記のバグに引っかかってしまったようです。
最初に回避策を書きましたが、これは`sample.bat`の用に引用符で囲まないでもいいケースだと良いのですが、
`D:\test dir\sample.bat`のようなケースで、空白があるからと引用符で囲むと、同じくエラーになります。
NG `cmd /c "D:\test dir\sample.bat" "TEST"`
OK `cmd /c D:\test^ dir\sample.bat "TEST"`
空白は`^`でエスケープするとOKです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る