Solusi Ben Gripka menyebabkan loop tak terbatas. Batch-nya berfungsi seperti ini (kode semu):
IF "no admin privileges?"
"write a VBS that calls this batch with admin privileges"
ELSE
"execute actual commands that require admin privileges"
Seperti yang Anda lihat, ini menyebabkan loop tak terbatas, jika VBS gagal meminta hak admin.
Namun, loop tak terbatas dapat terjadi, meskipun hak admin telah berhasil diminta.
Pemeriksaan dalam file kumpulan Ben Gripka hanya rawan kesalahan. Saya bermain-main dengan batch dan mengamati bahwa hak istimewa admin tersedia meskipun cek gagal. Menariknya, cek berfungsi seperti yang diharapkan, jika saya memulai file batch dari windows explorer, tetapi tidak ketika saya mulai dari IDE.
Jadi saya sarankan untuk menggunakan dua file batch terpisah. Yang pertama menghasilkan VBS yang memanggil file batch kedua:
@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"
Yang kedua, bernama "my_commands.bat" dan terletak di direktori yang sama dengan yang pertama berisi perintah Anda yang sebenarnya:
pushd "%CD%"
CD /D "%~dp0"
REM Your commands which require admin privileges here
Ini tidak menyebabkan loop tak terbatas dan juga menghapus pemeriksaan hak admin rawan kesalahan.