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


48

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

注:ファイルを右クリックしてをクリックするソリューションについては既に知っていますRun As Administratorが、これは自動ソリューションではありません。



私はこれを私のために動かす
Rohit 14年

2
2回の左クリックは、1回の左クリックと1回の右クリックよりもどのように自動化されますか?
ジグガンジャー

回答:


44

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

ショートカットを作成するには多くの方法がありますが、最も簡単で最速の方法は、コンテキストメニューの[ 送信 ]オプションを使用することです。

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

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

  1. 作成したショートカットを右クリックします(デスクトップ上または送信先)
  2. [ショートカット]タブで、[詳細設定...]ボタンをクリックします。
  3. [管理者として実行]チェックボックスをオンにして、モーダルウィンドウとメインプロパティウィンドウの両方で[OK]を押します。
  4. ショートカットをダブルクリックして実行すると、バッチファイルが管理者として実行されます。

1
常にバッチファイルにショートカットを呼び出させ、ショートカットにパラメーターを渡させて、ショートカットを呼び出さないようにすることができます。あなたはif "%~1" == "" start %USERPROFILE%\Desktop\Shortcut.lnk && GOTO :EOFすぐ下のようなものを挿入し@echo off、ショートカットリンクをprogram.bat aただの代わりにするでしょうprogram.bat
trlkly 14

2
Ifediは、「受け入れられた回答[Tech1337からのこの回答]は実際に機能します。しかし、Windows 7では、ショートカットがクリックされるたびにUACダイアログに耐えなければならないことに気付きました。」< -他けれども誰かがそれがUACなしで働くと言う
barlop

私にとって、ショートカットはダブルクリックしても現在のディレクトリで実行されませんが、.batは実行されます。ショートカットの[開始:]プロパティが入力されていても。.batが完全なファイルパスを指定していることを確認してください。
ロブモッシャー

29

別の質問に対する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"
:--------------------------------------

はい、私はこれを見つけて、それを現在使用しています。とにかく、ありがとう!
Antp 14

本質的に私が探していたもの。VBを使用せずにこれを行う方法があると思っていましたか?
シェフファラオ

@ChefPharaohは、バッチファイルを実行するための昇格したコンソールを作成します。PowerShellスクリプトでも同じことができます。
ジグガンジャー

これが私にとって最高の答えでした。
kasperhj

4

受け入れられた答えは実際に機能します。しかし、Windows 7では、ショートカットがクリックされるたびにUACダイアログに耐えなければならないことがわかりました。この私見は、この質問の「自動的に」から著しく損なわれます!

その後、自分の状況では.bat、問題のファイルがタスクスケジューラによって実行されることに気付きました。この場合、タスクRun with highest privilegesGeneralタブのオプションをチェックすることで問題をうまく処理できます。.batその後、任意の手間なしに、管理者として実行されます。

PS:この答えに画像をアップロードできないことに気付きませんでした。または私はできますか?


2
画像にリンクを追加すると、誰かがそれらをインライン化します。
ラムハウンド14年

@ラムハウンド。画像にリンクを追加しますか?画像はデスクトップ上にあり、オンラインのどこかにありません。または、確かに何かが欠けていますか?
イフェディオコンコウ14

はい; それらをアップロードします。答えにスクリーンショットをインライン化することはできません。
ラムハウンド14年

そのアップロードボタンがなかったか、昨日私は半分盲目でした!私は後者だと確信しています。とにかく、ファイルのアップロードは非常にうまく完了しましたが、画像を投稿するには10人の担当者が必要だと言われました。でもありがとう。
イフェディオコンコウ14

ただし、回答にリンクを配置することはできます。
ラムハウンド14年

4

Windows 7で

  1. そのバッチファイルへのショートカットを作成する

  2. ショートカットファイルを右クリックします

  3. アドバンスボタンをクリックして、管理者として実行するためのチェックボックスを見つけます

以下のスクリーンショットを確認してください

スクリーンショット


1
あなたの言ったことは受け入れられた答えと同じです。
Antp

はい、急いでいるすべての人のためのスクリーンショット付きの簡単なリストを作成したかっただけです。
fedmich

3
誰かの私は、彼らはとにかくanswer.thanksための一番下までスクロールしますことを疑う急いでいる場合
ANTP

3

私のスクリプトBatch_Adminを使用すると、管理者を自動的に昇格させて、任意の種類のバッチ独自のスクリプト、またはBATまたは.CMDで使用できます。この機能により、標準ツールを使用して、さまざまなWindowsシステムで同様に、標準環境での作業が保証されます。いくつかの標準および組み込みのWindowsコマンドを使用します。他の外部スクリプトを使用しないでください。スクリプトバッチだけでなく、管理者として任意のプログラムを呼び出すために使用できます。小さなスクリプトを作成するだけで十分で、その後、Administartorの許可が必要なプログラムを呼び出します。これを任意の検索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"を自分の前に設定すると、Auxiliaryはメッセージを表示します。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)  ***

これは上記の答えと類似または同一だと思います:superuser.com/a/852877/375935-jiggunjer
1

1

または、2番目のバッチファイルを作成できます。これにより、管理者パスワードを1回入力するだけで、管理者として何でも実行できます。パスワードは認証トークンに保存され、実際のコンピューターにクラック方法を知ってもらう必要があります。

runas /savecred /user:(domain)\(admin user) "(file path to exe,bat,whatever)"

1
@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"  
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"  
    "%temp%\getadmin.vbs"  
    exit /B
:gotAdmin  
chkdsk

これも動作します SOURCE:https : //social.technet.microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7f92/request-elevation-inside-cmdbatch-file


解決策を説明できますか?
scai


0

コマンドラインユーティリティを使用できますelevate。(ダウンロードリンク-https://drive.google.com/open?id = 0Bz7qe_olclTwVGZLUklFMHNxQ00

Usage: Elevate [-?|-wait|-k] prog [args]
-?    - Shows this help
-wait - Waits until prog terminates
-k    - Starts the the %COMSPEC% environment variable value and
                executes prog in it (CMD.EXE, 4NT.EXE, etc.)
prog  - The program to execute
args  - Optional command line arguments to prog

これはUACパナルを表示しませんか?
Antp

それが表示されます...しかし、それは何もないよりはましです(「アクセス拒否」を参照..)
T.Todua

しかし、実際には「自動」ではありません
-Antp

0

管理者としてバットを実行する例です。わたしにはできる。

こんなふうになります:

if "%~s0"=="%~s1" ( cd %~sp1 & shift ) else (
  echo CreateObject^("Shell.Application"^).ShellExecute "%~s0","%~0 %*","","runas",1 >"%tmp%%~n0.vbs" & "%tmp%%~n0.vbs" & del /q "%tmp%%~n0.vbs" & goto :eof
)
:eof
start Cmd /k "netsh wlan show profile"
pause </

cls
Color 0A
@echo off
echo.
cls
set/p ProfileName=Type the name of the current Wifi signal? 
echo.
start Cmd /k "netsh wlan show profile name=%ProfileName% key=clear"
pause </
exit
pause

スーパーユーザーへようこそ!これは質問に答える可能性がありますが、なぜそうするのかの説明を提供できれば、より良い答えになるでしょう。
DavidPostill

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.