Чи можливо автоматично запустити пакетний файл як адміністратор


48

Мені цікаво, чи можливо автоматично відкрити пакетний файл як адміністратор, коли ви двічі клацніть на пакетному файлі, оскільки команди потрібно запускати з адміністративними правами.

Примітка. Я вже знаю про рішення клацання правою кнопкою миші на файл і натискання на нього Run As Administrator, але це не автоматичне рішення.



Мені вдалося змусити мене це працювати: stackoverflow.com/a/13811519/27928
Rohit

2
як два лівих клацання більш автоматичні, ніж один лівий і один правий клацання?
jiggunjer

Відповіді:


44

Так, ви можете запустити пакетний файл з адміністративними правами. На жаль, ви не можете зробити це безпосередньо з пакетного файлу, самостійно. Спочатку потрібно створити ярлик цього пакетного файлу та змінити властивості цього ярлика, щоб зробити цю роботу.

Щоб створити ярлик, існує багато способів, але найпростіший і найшвидший спосіб - за допомогою параметра Надіслати в контекстне меню.

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

Звичайно, ви можете надіслати ярлик туди, куди хочете. Щоб підняти пакетний файл для запуску адміністратором, виконайте наведені нижче дії.

  1. Клацніть правою кнопкою миші створений вами ярлик (має бути на робочому столі або будь-коли, де ви надсилаєте його)
  2. На вкладці Ярлик натисніть кнопку Додатково ....
  3. Установіть прапорець Запустити як адміністратор і натисніть кнопку ОК як на модальне вікно, так і на головне вікно властивостей.
  4. Запустіть ярлик, двічі клацнувши по ньому, і пакетний файл повинен працювати як адміністратор.

1
Ви завжди можете змусити пакетний файл викликати ярлик, і дозволити йому пройти параметр, щоб знати, щоб не викликати це скорочення. Ви будете вставляти щось на кшталт if "%~1" == "" start %USERPROFILE%\Desktop\Shortcut.lnk && GOTO :EOFпрямо внизу @echo offі робити пряме посилання на, program.bat aа не просто program.bat.
trlkly

2
Ifedi пише "Прийнята відповідь [ця з Tech1337] дійсно працює. Але я виявив, що в Windows 7 мені доводилося переносити діалогове вікно UAC щоразу, коли клацнути ярлик". <- Хоча хтось інший каже, що це працює без UAC
барлоп

Для мене ярлик не працює в поточному каталозі при подвійному натисканні, хоча .bat робить. Навіть із заповненою властивістю "Почати в:" на ярлику. Тому переконайтеся, що ваш .bat вказує повний шлях до файлу.
Роб Мошер

29

Як написано у відповіді Бена Грипки на інше запитання:

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"
:--------------------------------------

Так, я знайшов це і використовую це currnetly. Спасибі все одно!
Антп

По суті те, що я шукав. Сподівався, що існує спосіб зробити це без використання VB?
Фараон шеф-кухаря

@ChefPharaoh це створює підвищену консоль для запуску пакетного файлу. Ви можете зробити те ж саме із сценарієм Powerhell.
jiggunjer

Це була найкраща відповідь для мене.
kasperhj

4

Прийнята відповідь дійсно працює. Але я виявив, що в Windows 7 мені доводилося переносити діалогове вікно UAC щоразу, коли клацнути ярлик. Це ІМХО значно погіршує "автоматично" у цьому питанні!

Тоді я виявив, що в моїй власній ситуації відповідний .batфайл повинен управляти Планувальником завдань. У цьому випадку, перевіривши Run with highest privilegesваріант на Generalвкладці завдання, непогано піклується про проблему. .batПотім запустити від імені адміністратора без будь - яких неприємностей.

PS: Я не усвідомлював, що не можу завантажити зображення на цю відповідь, тому що у мене зараз сидить гарний маленький скріншот! Або я можу?


2
Якщо ви додасте посилання на зображення, хтось додасть їх для вас.
Рамхаунд

@Ramhound. Додати посилання на зображення? Зображення є на моєму робочому столі, а не десь в Інтернеті. Або, напевно, мені щось не вистачає?
Іфдіді Оконкво

Так; Ви завантажуєте їх; Ви просто не можете вбудувати скріншоти у свою відповідь.
Рамхаунд

Або цієї кнопки завантаження не було, або я вчора була напівсліпою! Я впевнений, що це було останнє. Так чи інакше, я завершив завантаження файлів дуже красиво, лише щоб сказати, що для розміщення зображень мені потрібна 10 повторень. Спасибі, хоча.
Іфдіді Оконкво

Ви все ж можете розмістити посилання у відповіді.
Рамхаунд

4

на Windows 7

  1. Створіть ярлик до цього файлу Batch

  2. Клацніть файл ярлика правою кнопкою миші

  3. Натисніть кнопку "передперед ", щоб знайти прапорець для запуску адміністратора

Перевірте скріншот нижче

Знімок екрана


1
Ваша приказка те саме, що прийнята відповідь.
Antp

Так, я просто хотів створити простий список із скріншотом для всіх, хто поспішає.
fedmich

3
Якщо хто - то в поспіху я сумніваюся , що вони будуть прокручуватися на дно для answer.thanks в будь-якому випадку
Antp

3

Ви можете використовувати мій сценарій Batch_Admin, щоб автоматично підняти адміністратора для використання в будь-якому типі власного сценарію Batch, або BAT або .CMD. Ця функція забезпечує роботу в стандартному середовищі, зі стандартними інструментами і однаково в різних системах Windows. Він використовує кілька стандартних і вбудованих команд Windows. Не використовуйте жодних інших зовнішніх скриптів. Він може використовуватися для виклику будь-якої програми як адміністратор, а не лише сценарії Пакет. Досить створити невеликий сценарій, який потім викликає програму, яка вимагає дозволу Administartor. Розмістіть це в будь-якій папці PATH пошуку (від% PATH%).

Щоб використовувати його, ви просто вставите наступний рядок (точно так само) у його батьківський скрипт пакетного пакету, який потрібно запустити як адміністратор. Це найкраще робити у верхній частині нашого батьківського сценарію, і найкраще, щоб спочатку, які будуть викликані через CALL далі, деякі підкрипти (див. Докладне пояснення нижче).

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

Це може бути вставлено у будь-який дочірній сценарій, який викликається синтаксисом CALL. Для відображення повідомлення, поки воно все ще не має прав адміністратора, наприклад. за 5 секунд до виклику Batch_Admin встановіть змінну "ShowAdminInfo" на кількість секунд

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

Отже, як це працює:

• Викликає UAC.ShellExecute через VBScript для отримання дозволів користувача

• Batch запускає скрипт, або 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)  ***

Я думаю, що це схоже чи ідентично вищевказаній відповіді: superuser.com/a/852877/375935
jiggunjer

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

Це також працює ДЖЕРЕЛ: https://social.technet.microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7f92/request-elevation-inside-cmdbatch-file


Чи можете ви пояснити своє рішення?
scai

1
Ще одна версія superuser.com/a/852877/375935
jiggunjer

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?
Антп

що піднімає ... однак, краще, ніж нічого (бачачи "доступ заборонено")
Т.Тодуа

Насправді не "автоматичний", правда
Антп

0

Це приклад запускати bat як адміністратора. Це працює для мене.

Виходить так:

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

Ще один варіант superuser.com/a/852877/375935
jiggunjer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.