管理者としてバッチファイルを自動的に実行することは可能ですか

管理者としてバッチファイルを自動的に実行することは可能ですか

私はそれが可能かどうか疑問に思っています自動的にコマンドは管理者権限で実行する必要があるため、バッチ ファイルをダブルクリックするときには、バッチ ファイルを管理者として開きます。

注: ファイルを右クリックして をクリックするという解決策については既に知っていますRun As Administratorが、これは自動的な解決策ではありません。

答え1

はい、管理者権限でバッチ ファイルを実行することができます。残念ながら、バッチ ファイル自体から直接実行することはできません。これを機能させるには、まずそのバッチ ファイルのショートカットを作成し、そのショートカットのプロパティを変更する必要があります。

ショートカットを作成するには、さまざまな方法がありますが、最も簡単で速い方法は、に送るコンテキスト メニューのオプション。

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

もちろん、ショートカットを任意の場所に送信できます。バッチ ファイルを管理者として実行するように昇格するには、次の手順に従います。

  1. 作成したショートカット(デスクトップまたは送信先にあるはずです)を右クリックし、「プロパティ」を選択します。
  2. [ショートカット] タブで、[詳細設定...] ボタンをクリックします。
  3. [管理者として実行] チェックボックスをオンにし、モーダル ウィンドウとメイン プロパティ ウィンドウの両方で [OK] を押します。
  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 を使用すると、任意のタイプのバッチ独自のスクリプト、または 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)  ***

関連情報