|
|
发表于 2026-8-28 17:24:32
|
显示全部楼层
在你提供的代码基础上精简了一下,部分代码实现感觉更合理一点:
- @ECHO OFF
- PUSHD "%~DP0" & SETLOCAL ENABLEDELAYEDEXPANSION
- SET "Run_flag=%WinDir%\Temp\UAC_TEMP_FLAG"
- REM 提权限后是否隐藏运行窗口,0默认不隐藏,1隐藏
- SET "hidden=0"
- IF /I "%username%" EQU "system" GOTO :runas
- REG QUERY "HKU\S-1-5-19" >NUL 2>NUL && GOTO :runas
- REM 关闭UAC或普通账户执行时,由于无法获取管理员权限会导致无限弹窗,此处代码确保第二次调用时能正常退出
- DIR /B "%Run_flag%" && (RMDIR /S /Q "%Run_flag%" & ENDLOCAL & ECHO 无法提升到管理员权限! & SET /P "=请按任意键退出..." <NUL & PAUSE >NUL & EXIT /B) || MKDIR "%Run_flag%"
- POWERSHELL.EXE /? >NUL 2>NUL && SET "psh=1" || SET "psh=0"
- SET "argv=%*"
- IF DEFINED argv (
- IF "%psh%"=="1" SET "argv=%argv:"="""%"
- IF "%psh%"=="0" SET "argv=%argv:"=""%"
- )
- SET vshow=1
- IF %hidden% EQU 1 (SET "winstyle=-WindowStyle Hidden" & SET vshow=0)
- IF "%psh%"=="1" (POWERSHELL -nop -Command "Start-Process cmd.exe -Verb RunAs %winstyle% -ArgumentList '/c \""""%~f0""" %argv%\"'" >NUL 2>NUL & EXIT /B)
- IF "%psh%"=="0" (
- ECHO CreateObject^("Shell.Application"^).ShellExecute "cmd.exe", "/c """"%~f0"" %argv%""", "", "runas", %vshow% > "%temp%\Admin.vbs"
- CSCRIPT.EXE //Nologo "%temp%\Admin.vbs" >NUL 2>NUL & DEL /F /Q "%temp%\Admin.vbs" >NUL 2>NUL & EXIT /B
- )
- :runas
- :: ON THE Privilege Var UAC ::
- ECHO 传递参数:%*
- PAUSE & EXIT /B
复制代码
|
|