コマンドを実行する必要があるため、バッチファイルをダブルクリックすると自動的にバッチファイルを管理者として開くことができるかどうか考えています。管理者権限を持ちます。
注:ファイルを右クリックしてRun As Administrator
をクリックするという解決策については既に知っていますが、これは自動的な解決策ではありません。
はい、管理者権限でバッチファイルを実行することができます。残念ながら、これを自分自身のバッチファイルから直接行うことはできません。これを機能させるには、まずそのバッチファイルのショートカットを作成し、そのショートカットのプロパティを変更する必要があります。
ショートカットを作成するには、さまざまな方法がありますが、最も簡単で早い方法は、コンテキストメニューの[に送信]オプションを使用することです。
Right click batch file > Send to > Desktop (create shortcut)
もちろん、あなたはあなたが望むところへのショートカットを送ることができます。バッチファイルを管理者として実行するように昇格するには、次の手順に従います。
で別の質問に対する回答 によって投稿された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の場合
そのバッチファイルへのショートカットを作成します。
ショートカットファイルを右クリック
管理者として実行するためのチェックボックスを見つけるには、進むボタンをクリックします。
下のスクリーンショットを確認してください
私のスクリプトBatch_Adminを使用して、任意のタイプのバッチ独自スクリプト、またはBATまたは.CMDで使用するために管理者を自動的に昇格させることができます。この機能は、標準ツールを使用して、および異なるWindowsシステムでも同じように、標準環境での作業を保証します。それはいくつかの標準的で組み込みのWindowsコマンドを使います。他の外部スクリプトを使用しないでください。スクリプトバッチだけでなく、任意のプログラムを管理者として呼び出すために使用できます。小さなスクリプトを作成するだけで十分です。その後、そのスクリプトが、許可管理者を必要とするプログラムを呼び出します。これを任意の検索パスフォルダー(%PATH%から)に配置します。
これを使用するには、管理者として実行される親のBatchスクリプトに次の行を(正確に同じように)挿入するだけです。これは親スクリプトの一番上で行うのが最善であり、最初に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) ***
受け入れられた答えは確かに機能します。しかし、私は、Windows 7では、ショートカットがクリックされるたびにUACダイアログを我慢しなければならないことに気付きました。この私見は、この質問の「自動的な」ことを著しく損ねています!
それから私は私自身の状況では、問題の.bat
ファイルがTask Schedulerによって実行されることになっていることを知りました。この場合、タスクのGeneral
タブのRun with highest privileges
オプションをチェックすることで問題をうまく解決できます。その後、.bat
は管理者として問題なく実行されます。
シモンズ:私はこの答えで画像をアップロードできないことに気づいていませんでした。それとも私?
@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
あるいは、2番目のバッチファイルを作成することもできます。これにより、管理者パスワードを1回入力するだけで、管理者として何でも実行できるようになります。パスワードは認証トークンに保存され、実際のコンピュータに解読方法を知らせます。
runas /savecred /user:(domain)\(admin user) "(file path to exe,bat,whatever)"
コマンドラインユーティリティ 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