bash
@echo off
net session >nul 2>&1
if %errorLevel% == 0 (
echo 已拥有管理员权限...
goto :run
) else (
echo 正在请求管理员权限...
goto UACPrompt
)
:UACPrompt
set "script=%~s0"
echo Set UAC = CreateObject("Shell.Application") > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "wt.exe", "cmd /k " ^& Chr(34) ^& "%script%" ^& Chr(34), "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:run
cd /d "%~dp0"
echo 当前目录: %cd%
echo 当前权限: 管理员
claude-internal
cmd /k
net session这个命令只有管理员权限才能成功执行,否则会报错,通过判断%errorLevel%来检测当前是否是管理员权限。- set "script=%~s0" 表示当前批处理文件的短路径名(短8.3格式路径),用来避免路径中带空格等问题。把当前批处理脚本路径赋给变量
script - 向临时文件
%temp%\getadmin.vbs写入一句 VBScript 代码:Set UAC = CreateObject("Shell.Application")创建一个Shell应用对象,用来调用Windows Shell的功能(比如提升权限)。 - 向同一个 VBScript 文件追加写入执行命令:
UAC.ShellExecute是调用Shell应用来启动新程序。"wt.exe"是 Windows Terminal 程序(Windows 10和11自带的终端模拟器)。"cmd /k " ^& Chr(34) ^& "%script%" ^& Chr(34):这是给 Windows Terminal 里执行的命令。cmd /k "路径\脚本名",在cmd中执行当前脚本并保持窗口打开。这里用Chr(34)代替双引号,防止路径带空格导致语法错误。""空字符串表示没有使用特定工作目录。"runas"表明要以管理员权限运行(UAC提升)。1表示以普通窗口显示程序。 - "%temp%\getadmin.vbs" 直接运行刚才生成的 VBScript 文件,从而触发提升权限的命令执行。
- exit /B 终止当前批处理脚本的执行(从调用处退出批处理脚本,而不是关闭整个命令窗口)。常用于批处理脚本里结束脚本或某个子程序。
claude-internal 是实际目标命令行,cmd /k 执行完指定命令后,不关闭命令行窗口,保持窗口打开。