コマンドを管理者権限で実行する必要があるため、バッチファイルをダブルクリックすると、管理者としてバッチファイルを自動的に開くことができるかどうか疑問に思います。
注:ファイルを右クリックしてをクリックするソリューションについては既に知っていますRun As Administrator
が、これは自動ソリューションではありません。
コマンドを管理者権限で実行する必要があるため、バッチファイルをダブルクリックすると、管理者としてバッチファイルを自動的に開くことができるかどうか疑問に思います。
注:ファイルを右クリックしてをクリックするソリューションについては既に知っていますRun As Administrator
が、これは自動ソリューションではありません。
回答:
はい、管理者権限でバッチファイルを実行できます。残念ながら、バッチファイル自体から直接これを行うことはできません。これを機能させるには、まずそのバッチファイルのショートカットを作成し、そのショートカットのプロパティを変更する必要があります。
ショートカットを作成するには多くの方法がありますが、最も簡単で最速の方法は、コンテキストメニューの[ 送信 ]オプションを使用することです。
Right click batch file > Send to > Desktop (create shortcut)
もちろん、好きな場所にショートカットを送信できます。バッチファイルを昇格して管理者として実行するには、次の手順に従います。
if "%~1" == "" start %USERPROFILE%\Desktop\Shortcut.lnk && GOTO :EOF
すぐ下のようなものを挿入し@echo off
、ショートカットリンクをprogram.bat a
ただの代わりにするでしょうprogram.bat
。
別の質問に対する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"
:--------------------------------------
受け入れられた答えは実際に機能します。しかし、Windows 7では、ショートカットがクリックされるたびにUACダイアログに耐えなければならないことがわかりました。この私見は、この質問の「自動的に」から著しく損なわれます!
その後、自分の状況では.bat
、問題のファイルがタスクスケジューラによって実行されることに気付きました。この場合、タスクRun with highest privileges
のGeneral
タブのオプションをチェックすることで問題をうまく処理できます。.bat
その後、任意の手間なしに、管理者として実行されます。
PS:この答えに画像をアップロードできないことに気付きませんでした。または私はできますか?
私のスクリプト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) ***
@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
コマンドラインユーティリティを使用できます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
管理者としてバットを実行する例です。わたしにはできる。
こんなふうになります:
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