如何编写批处理文件可以将参数作为具有管理权限的命令运行?

时间:2016-07-14 02:37:51

标签: windows batch-file cmd

问题与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)。

  1. 将参数作为命令运行run_params_as_cmd.bat

    %*
    pause
    
  2. 要获得管理权限,我会找到一些代码 来自http://larrynung.github.io/2014/01/01/batch-run-as-administrator/

  3. 然后我尝试了以下代码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
    
  4. 为了测试该代码,我尝试了一些需要管理员权限的命令

    • 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

  5. 但这些命令似乎没有被执行但被忽略为字符串。

    我猜问题与代码有关,还有其他方法吗? 编写批处理文件可以将参数作为具有管理权限的命令运行吗?

1 个答案:

答案 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