11/30
19:14
日记

获取UNC路径

一些脚本需要管理员权限运行,但是最终用户没有管理员权限,这时需要管理员使用其他用户身份运行。如果脚本是放在一个映射的驱动器里的话,管理员往往因为自身账户没有映射该网络位置而无法运行。所以为了方便起见,在脚本里直接检测自身UNC路径,然后用管理员身份运行该脚本。

set "_FilePath=%~f0"
if not "%~d0"=="\\" call :getUNC
fltmc >nul 2>&1 || (
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\GetAdmin.vbs"
    echo UAC.ShellExecute "%_FilePath%", "", "", "runas", 1 >> "%temp%\GetAdmin.vbs"
    "%temp%\GetAdmin.vbs"
    del /f /q "%temp%\GetAdmin.vbs" >nul 2>&1
    exit
)
脚本正文
exit
:getUNC
FOR /F "tokens=3" %%i IN ('NET USE ^| FIND "%~d0"') DO (
   set NetworkPath=%%i)
SET "_FilePath=%NetworkPath%%~pnx0"

获取UNC路径