Ben Gripkaのソリューションは無限ループを引き起こします。彼のバッチは次のように機能します(疑似コード):
IF "no admin privileges?"
"write a VBS that calls this batch with admin privileges"
ELSE
"execute actual commands that require admin privileges"
ご覧のとおり、VBSが管理者権限の要求に失敗した場合、これにより無限ループが発生します。
ただし、管理者権限が正常に要求されていても、無限ループが発生する可能性があります。
Ben Gripkaのバッチファイルでのチェックは、エラーが発生しやすいだけです。バッチをいじってみたところ、チェックは失敗しましたが、管理者権限は利用可能です。興味深いことに、Windowsエクスプローラーからバッチファイルを開始した場合、チェックは期待どおりに機能しましたが、IDEから開始した場合は機能しませんでした。
したがって、2つの個別のバッチファイルを使用することをお勧めします。1つ目は2つ目のバッチファイルを呼び出すVBSを生成します。
@echo off
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c ""%~dp0\my_commands.bat"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
"my_commands.bat"という名前で、最初のものと同じディレクトリにある2番目のファイルには、実際のコマンドが含まれています。
pushd "%CD%"
CD /D "%~dp0"
REM Your commands which require admin privileges here
これにより無限ループは発生せず、エラーが発生しやすい管理者権限チェックも削除されます。