|
有点长,占用14行,带来的好处是:
1、关闭UAC的系统上,Users组用户执行时,不会死循环弹命令行窗口
2、支持路径中带空格和!,支持参数中带空格,例如被这样调用 "d:\my file\!)inst.cmd" "1 1" "2 2"
3、用vbs或者mshta以隐藏方式调用批处理时,提权后新的命令行窗口并不会隐藏,本模板能解决该问题,注释掉第二行即可
4、系统有powershell或者vbs即可用,在用户名为system的PE下也可用
@ECHO OFF & PUSHD "%~DP0"
::set "hidden=1"
if /i "%username%" equ "system" goto :runas
reg QUERY "HKU\S-1-5-19" >nul 2>nul && goto :runas
setlocal ENABLEDELAYEDEXPANSION
set "vShow=1" & if defined hidden (set "vShow=0" & set "winstyle= -WindowStyle Hidden")
set "args2=" & for %%a in (%*) do (set "arg=%%a" & set "args2=!args2! ""!arg!""")
if /i "!args2!" neq "" set "args2=!args2:"""=""!"
powershell /? >nul 2>nul && (set "psh=1" & set "args1=" & for %%a in (%*) do (set "arg=%%a" & set "args1=!args1! \"!arg!\""))
setlocal DISABLEDELAYEDEXPANSION
dir "%windir%\temp\%~nx0.2" >nul 2>nul && (rmdir /q /s "%windir%\temp\%~nx0.2" >nul 2>nul & echo 提升到管理员权限失败,退出 & pause & exit) || (mkdir "%windir%\temp\%~nx0.2" >nul 2>nul)
if defined psh (powershell -nop -Command "Start-Process cmd -Verb RunAs %winstyle% -ArgumentList '/c \""""%~f0""" %args1%\"'" >nul 2>nul && (rmdir /q /s "%windir%\temp\%~nx0.2" >nul 2>nul & exit) || (rmdir /q /s "%windir%\temp\%~nx0.2" >nul 2>nul & echo 提升到管理员权限失败,退出 & pause & exit)) else (
echo CreateObject^("Shell.Application"^).ShellExecute "cmd.exe", "/c """"%~f0"" %args2% """, "", "runas", %vShow% > "%temp%\T.vbs" & "%temp%\T.vbs" >nul 2>nul & del /q /f "%temp%\T.vbs" >nul 2>nul & timeout /t 3 /nobreak >nul & rmdir /q /s "%windir%\temp\%~nx0.2" >nul 2>nul & exit)
:runas
if defined hidden (echo %time%, runas,参数:%* > %~dp0out.txt) else (
echo runas,参数:%*
pause
)
|
|