无法删除bat文件中的提升权限

时间:2014-10-30 11:03:37

标签: batch-file drag-and-drop elevated-privileges

我有一个需要管理员权限的第一个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中检索它。

1 个答案:

答案 0 :(得分:1)

行为是设计的,以避免安全风险 Can't drag programs into cmd window
但在你的情况下,你似乎有点偏执,因为你删除了特权......

但也许你可以改变提升的顺序 您可以为拖放操作启动一个无法使用的批处理,此批处理使用其中一个提升方法启动提升的批处理文件。

关于转移变量的问题(given_name)。

"ELEV & !given_name!"更改为"!given_name!"可以使用%1从temp.bat访问此内容。

SO: How can I auto-elevate my batch file...