是否可以以管理員身分自動執行批次文件

是否可以以管理員身分自動執行批次文件

我想知道是否可以自動地雙擊批次檔時,請以管理員身分開啟批次文件,因為命令需要以管理權限執行。

注意:我已經知道右鍵單擊文件並單擊 的解決方案Run As Administrator,但這不是自動解決方案。

答案1

是的,您可以使用管理權限來執行批次檔。不幸的是,您無法直接從批次檔本身執行此操作。您需要先建立該批次檔的捷徑並變更該捷徑的屬性才能使其運作。

建立快捷方式的方法有很多,但最簡單、最快的方法是使用發給上下文選單中的選項。

Right click batch file > Send to > Desktop (create shortcut)

當然,您可以將快捷方式發送到您想要的任何位置。若要將批次檔提升為以管理員身分執行,請依照下列步驟操作:

  1. 右鍵單擊您剛剛建立的快捷方式(應該位於桌面上或您發送的位置),然後選擇“屬性”
  2. 在“快捷方式”標籤下,按一下“進階...”按鈕。
  3. 勾選「以管理員身分執行」複選框,然後按「確定」進入模式視窗和主屬性視窗。
  4. 雙擊運行快捷方式,批次檔應以管理員身分執行。

答案2

正如張貼在一個答案Ben Gripka 回答另一個問題:

REM --add the following to the top of your bat file--


@echo off

:: BatchGotAdmin
:-------------------------------------
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...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------

答案3

在 Windows 7 上

  1. 建立該批次檔的捷徑

  2. 右鍵單擊快捷方式文件

  3. 點選前進按鈕找到以管理員身份執行的複選框

檢查下面的螢幕截圖

螢幕截圖

答案4

您可以使用我的腳本 Batch_Admin 自動提升管理員權限,以便在任何類型的 Batch 自己的腳本、BAT 或 .CMD 中使用。此功能可確保在標準環境下使用標準工具在不同的Windows系統中以相同的方式運作。它使用多個標準和內建 Windows 命令。不要使用任何其他外部腳本。它可用於以管理員身份呼叫任何程序,而不僅僅是批次腳本。建立一個小腳本就足夠了,然後該腳本呼叫需要管理員權限的程式。將其放置在任何搜尋 PATH 資料夾中(來自 %PATH%)。

要使用它,您只需在其父批次腳本中插入以下行(完全相同),該腳本將以管理員身份執行。這最好在父腳本的頂部完成,並且最好先透過 CALL 進一步呼叫一些子腳本(請參閱下面的詳細說明)。

net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*

這可以插入到任何子腳本中,透過 CALL 語法呼叫。要在訊息仍然沒有管理員權限時顯示訊息,例如。在呼叫 Batch_Admin 之前 5 秒,設定變數「ShowAdminInfo」的秒數

SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*

那麼它是如何運作的:

• 透過VBScript 呼叫UAC.ShellExecute 來取得使用者權限

• 批次運行腳本,或BAT或CMD

• 腳本呼叫者可以在呼叫中包含很長的名稱空間(用引號引起來)

• 傳回從命令列傳遞的主腳本呼叫的所有參數,就好像沒有傳輸呼叫一樣,並從頭開始執行某些操作,還可以使用特殊字符,如感嘆號 (!) 和百分比 (%),以及帶括號( )

• 如果呼叫發生在該腳本為主腳本的目錄中,則保留主腳本位置

• 如果我們在自己之前設定變數“ShowAdminInfo”,則輔助會顯示一則訊息,例如。 5 秒鐘,這可能會阻止管理員立即授予提供附加資訊和做出明智決定的可能性。必須設定的設定範例: SET ShowAdminInfo=5 預設情況下,由於未定義該變量,因此不顯示。

• 此腳本也會在系統搜尋路徑% PATH% 和網路資源中調用,例如:\Computer\share\test.bat

• 當腳本幾乎同時呼叫多個Batch_Admin 時,防止在編寫必要的輔助檔案時產生誤解。它使用 1 到 100 之間的隨機數

• 但是,最好是在父腳本上使用它。轉換為管理員權限始終要求您在新視窗、新環境中再次完全執行腳本,而無需求助於先前在腳本中設定的變量,並且這些變數的值未通過然後以管理員身份呼叫。只是腳本會再次執行。

下面是一個完整的Batch_Admin腳本。有關此內容的詳細資訊位於我的網站上。

將以下文字複製到記事本中並將其儲存到磁碟:Batch_Admin.bat

@echo off
if "%~1"=="" (echo *** Batch_Admin ***&echo.&echo Automatically get admin rights for another Batch. See info inside.&TIMEOUT /T 30>nul&goto:eof)

::  A D M I N I S T R A T O R   - Automatically get admin rights for script batch. Paste this on top:    net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*
::                                Also keep Batch directory localisation and then set variable:   PATH_BAT
::                                if earlier variable "ShowAdminInfo" is empty (not defined) then no info, else showing info with number of seconds
::
::                                Elaboration:  Artur Zgadzaj
setlocal
setlocal DisableDelayedExpansion

SET "Localy="
if exist "%~1"      SET "Localy=YES"
if exist "%~1.BAT"  SET "Localy=YES"
if exist "%~1.CMD"  SET "Localy=YES"
if defined Localy   FOR %%I IN ("%~1") DO SET "PATH_BAT=%%~dI%%~pI"

 SET P1=%~1
 SET Parameters=%*
 SET Parameters=%Parameters:!=^^!%
setlocal EnableDelayedExpansion
 SET Parameters=!Parameters:%P1%=!
 SET Parameters=!Parameters:%%=%%%%!
setlocal DisableDelayedExpansion
 SET Parameters=%Parameters:~3%

net session >nul 2>nul&if not errorlevel 1  goto Administrator_OK

if not defined ShowAdminInfo   goto skip_message_Administrator
echo.
echo Script:  %~1
echo.
echo *****************************************************************
echo ***    R U N N I N G     A S     A D M I N I S T R A T O R    ***
echo *****************************************************************
echo.
echo Call up just as the Administrator. You can make a shortcut to the script and set:
echo.
echo          shortcut ^> Advanced ^> Running as Administrator
echo.
echo     Alternatively run once "As Administrator"
echo     or in the Schedule tasks with highest privileges
echo.
echo Cancel Ctrl-C or wait for launch  %ShowAdminInfo%  seconds ...
TIMEOUT /T %ShowAdminInfo% > nul

:skip_message_Administrator
MD %TEMP% 2> nul
SET /A $Admin$=%RANDOM% * 100 / 32768 + 1

SET "Percent="
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul
echo %Parameters% > "%TEMP%\$Admin_%$Admin$%_Test.bat"
if not exist "%TEMP%\$Admin_%$Admin$%_Test.bat"  SET Percent=^"
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul

echo @SET "PATH_BAT=%PATH_BAT%"               > "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
echo @SET "BatchFullName=%BatchFullName%"    >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
if defined Localy  (echo @CD /D "%PATH_BAT%" >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat")
echo @"%~1" %Parameters% %Percent% >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"

echo SET UAC = CreateObject^("Shell.Application"^)                                   > "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
echo UAC.ShellExecute "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat", "", "", "runas", 1 >> "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
"%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
endlocal
exit /B

:Administrator_OK
"%~1" %Parameters%
goto:eof
REM *** A D M I N I S T R A T O R  - Automatically get admin rights  (The End)  ***

相關內容