问题与How can I auto-elevate my batch file, so that it requests from UAC administrator rights if required?
不同因为将参数传递给具有获取管理权限的代码的批处理文件时会出现一些问题。 获得权限后,参数将丢失并变为未定义。 我通过首先将参数存储到文件来解决这个问题,请在我的答案中查看详细信息。
说需要批处理文件是run_as_admin.bat
,
通过运行run_as_admin.bat your_command your_params
,我们可以使用管理权限执行命令(例如run_as_admin delete /path/to/system_file
)。
将参数作为命令运行run_params_as_cmd.bat
%*
pause
要获得管理权限,我会找到一些代码 来自http://larrynung.github.io/2014/01/01/batch-run-as-administrator/
然后我尝试了以下代码run_as_admin.bat
:
@echo off
call:TryToRunAsAdmin
if %ERRORLEVEL%==1 exit /B
echo got administrative privileges...
:: run parameters as command <<< Here '%*' seems not be executed as a command.
%*
pause
goto :eof
:TryToRunAsAdmin
set GetAdminScriptFile="%temp%\getadmin.vbs"
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
call:UACPrompt
set ERRORLEVEL=1
) else (
if exist %GetAdminScriptFile% ( del %GetAdminScriptFile% )
set ERRORLEVEL=0
)
goto :eof
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > %GetAdminScriptFile%
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> %GetAdminScriptFile%
call %GetAdminScriptFile%
goto :eof
为了测试该代码,我尝试了一些需要管理员权限的命令
run_as_admin.bat reg add "HKLM\SOFTWARE\Classes\.php" /v PerceivedType /d text
run_as_admin.bat %SystemRoot%\system32\drivers\etc\hosts_old.txt
但这些命令似乎没有被执行但被忽略为字符串。
我猜问题与代码有关,还有其他方法吗? 编写批处理文件可以将参数作为具有管理权限的命令运行吗?
答案 0 :(得分:0)
在请求管理权限时,传递给import matplotlib.pyplot as plt
fig,ax = plt.subplots()
plt.plot(x,y)
plt.xlabel('Time')
plt.ylabel('Temperature')
plt.tick_params(axis='both', which='major', labelsize=22)
的参数将消失。
所以你需要先存储参数。
以下是解决方案:
run_as_admin.bat