我有一个需要管理员权限的第一个bat文件,因此用户将“以管理员身份”运行它,然后我的第二个bat文件不应该具有管理员权限(需要从资源管理器中拖放)。
我尝试使用以下命令从第一个打开第二个bat文件,但我无法拖动和放大如果第一个以管理员身份开始,则进入第二个。
runas /trustlevel:0x20000 "cmd /C %~dp0upload.bat"
和
%~dp0upload.bat
我该怎么做?
更新:完整代码
@echo off &setlocal
if not exist "MyFolder" GOTO :prog
runas /trustlevel:0x20000 "cmd /C %~dp0upload.bat"
exit /B
:prog
more code.....
exit
更新2:其他尝试
使用
runas /trustlevel:0x20000 "call %~dp0upload.bat"
引发错误,如提到的here
更新3:使用vbs
好的,我设法以普通用户的身份打开第一批用户,并从那里使用以下方式调用另一个具有提升权限的球员:
setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "temp.bat", "ELEV & !given_name!", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
现在我需要将!given_name!
传递给第二个bat文件,但我不知道如何传递它以及如何在第二个bat中检索它。
答案 0 :(得分:1)
行为是设计的,以避免安全风险
Can't drag programs into cmd window
但在你的情况下,你似乎有点偏执,因为你删除了特权......
但也许你可以改变提升的顺序 您可以为拖放操作启动一个无法使用的批处理,此批处理使用其中一个提升方法启动提升的批处理文件。
关于转移变量的问题(given_name)。
将"ELEV & !given_name!"
更改为"!given_name!"
可以使用%1
从temp.bat访问此内容。