Як кодувати BAT-файл, щоб завжди працювати в режимі адміністратора?


149

Я маю цей рядок у своєму BAT-файлі:

"Example1Server.exe"

Я хотів би виконати це в режимі адміністратора. Як змінити bat-код, щоб запустити це як адміністратор?

Це правильно? Чи потрібно ставити цитати?

runas /user:Administrator invis.vbs Example1Server.exe

1
Дивіться також stackoverflow.com/questions/7690994/…
Ed Greaves

1
Дивіться також stackoverflow.com/questions/7044985/…
Ed Greaves

Відповіді:


71

Ви використовуєте runasдля запуску програми як конкретного користувача:

runas /user:Administrator Example1Server.exe

6
@karikari: Таке ім'я ( Example1Server.exe) не потрібно ставити в лапки, але в деяких інших випадках (наприклад, пробіли в імені :) Example1 Server.exeвони вам справді знадобляться. Ви можете використовувати лапки, навіть якщо вони не потрібні.
Андрій М

18
Обліковий запис адміністратора не може бути названий адміністратором
Anders

9
@Anders: Ні, це може не статися; Я припускаю, що ОП може «визначити схему». Це не була відповідь plz-give-me-teh-codez: -S До речі, я повинен додати, що ОП може захотіти якусь більш складну команду, наприклад runas /User:abc "csript myscript.vbs", або runas /User:abc "cmd /c start ...".
Керрек СБ

16
Я побоююсь, що ця відповідь - це не те, чого хочуть 90% відвідувачів, оскільки це навіть важче, ніж клацання правою кнопкою миші -> запустити адміністратора, навіть якщо це технічно правильно. Перевірте ще раз іншу відповідь. Це саме те, що найбільше захоче.
j riv

13
Ні, ця відповідь технічно неправильна. Запуск як адміністратора - це не те саме, що запуск під користувачем, ім'я якого - адміністратор, а привілеї різні. Дивіться іншу відповідь.
Олександр Гельбух

370

Інша відповідь вимагає ввести пароль облікового запису адміністратора. Крім того, запуск облікового запису в групі адміністраторів не є таким, як запуск, як адміністратор, див. UAC у Вікіпедії

Інструкції для Windows 7

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

  1. Клацніть правою кнопкою миші пакетний файл і натисніть «Копіювати»
  2. Перейдіть до місця, де потрібно ярлик
  3. Клацніть правою кнопкою миші фон каталогу
  4. Виберіть ярлик Вставити

Потім ви можете встановити ярлик для запуску адміністратора:

  1. Клацніть ярлик правою кнопкою миші
  2. Виберіть "Властивості"
  3. На вкладці Ярлик натисніть Додатково
  4. Установіть прапорець "Запустити як адміністратор"
  5. Клацніть OK, OK

Тепер, коли ви двічі клацніть ярлик, він запропонує вам підтвердити UAC, а потім запустити як адміністратор (що, як я вже казав вище, відрізняється від запуску в обліковому записі в групі адміністраторів)

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

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

Примітка. Якщо ви це зробите для запуску адміністратора, поточний каталог (шлях) не буде таким самим, як файл bat. Це може викликати деякі проблеми в багатьох випадках, коли файл bat посилається на відносні файли поруч. Наприклад, у моєму Windows 7 курсом буде SYSTEM32 замість розташування файлу bat! Щоб вирішити це , ви повинні використовувати

cd "%~dp0"

або краще

pushd "%~dp0"

щоб переконатися, що cur dir знаходиться по тому ж шляху, де і файл bat.


8
А, це було приховано насправді (більшість з нас не думали, що в цій вдосконаленій кнопці є така опція). Я майже впевнений, хто не думав про іншу складну відповідь, цього не знав. Це відповідь, яку хочуть 90% + відвідувачів.
j riv

1
Я згоден. це має бути відповіддю. Я також додав скріншот, щоб полегшити пошук кнопки заздалегідь
fedmich

1
Це стосується і Windows Server 2012 R2.
гарек

3
Це не працює для мене ні в Windows 10, ні в Windows 7. Коли я намагаюся запуститись як адміністратор, клацнувши правою кнопкою миші файл BAT і «Запустити як адміністратор», або використовуючи описану тут техніку, пакетний файл спалахує на секунду потім закривається негайно, без виконання команд чи програм у пакетному файлі. Я спробував запустити дуже прості пакетні файли, які просто перегукуються з "Hello World", і вони теж не спрацьовують таким чином. Це дуже засмучує. Я поки що не змогла знайти рішення.
Джонатан Елкінс

1
@JonathanElkins Ви спробували додати паузу в кінці пакетного файлу?
Ед Грівз

32

Просто додайте це у верхню частину файлу вашої команди:

set "params=%*"
cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || (  echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~sdp0"" && %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )

Він підніме адміністратору, а також залишиться у правильному каталозі. Тестовано на Windows 10.


1
Тестується в Windows 7 і працює чудово. Але ви могли б пояснити, що це робить? Я не знайомий з файлами bat.
Sunfloro

1
Він створює файл VBScript з кодом, який піднімає вас до адміністратора (якщо ви ще цього не зробили) і запускає файл bat знову, на цей раз як адміністратор.
Сир

1
Що я саме шукаю! не потрібні додаткові зміни або додатковий файл!
MSS

1
що таке getadmin.vbs?
Кікенет

4
Додавання ваших двох рядків коду до мого існуючого пакетного файлу - для мене гарне рішення. Мені довелося також додати exitв кінець свого пакетного файлу, інакше я залишиться під запитом. Це, мабуть, тому, що .vbs запускає друге командне вікно.
Бен

10

Якщо ви можете скористатися стороною утилітою, ось elevateутиліта командного рядка .

Це опис використання:

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

elevate.exeскелі!
Сангбок Лі

8

Ви можете використовувати nircmd.exe «S підняти команду

Довідник команди NirCmd - підвищувати

elevate [Program] {Command-Line Parameters}

Тільки для Windows Vista / 7/2008: Запустіть програму з правами адміністратора. Коли [Програма] містить один або декілька символів пробілу, ви повинні помістити їх у лапки.

Приклади:

elevate notepad.exe 
elevate notepad.exe C:\Windows\System32\Drivers\etc\HOSTS 
elevate "c:\program files\my software\abc.exe"

PS: Я використовую його на win 10, і він працює


6

конвертуйте свій пакетний файл у .exe за допомогою цього інструменту: http://www.battoexeconverter.com/, тоді ви можете запустити його як адміністратор


2
Майте на увазі, що багато антивірусів дуже чутливі до файлів EXE, створених таким чином. "Перетворення / шифрування" пакетних файлів таким чином - це старий спосіб, який використовують шкідливі програми.
Хамі

Якщо ви аналізуєте цей домен за допомогою Symantec - Threat Type: othermalware Причина загрози: Домен повідомляється та підтверджується як службове зловмисне програмне забезпечення. Ідентифіковано як шкідливий домен або URL.
Суніль

Погана пропозиція!
Влад


6

Я думаю, що у мене є рішення проблеми з паролем. Цей єдиний аргумент справді дивовижний. Він запитує пароль один раз, і ніколи не запитує його знову. Навіть якщо ви помістите його в іншу програму, він не буде запитувати пароль. Ось:

runas /user:Administrator /savecred Example1Server.exe


4
  1. Мій експеримент вказує, що команда runas повинна включати домен користувача адміністратора (принаймні, це стосується екологічної установки моєї організації):

    runas /user:AdminDomain\AdminUserName ExampleScript.bat
    

    Якщо ви ще не знаєте домену користувача адміністратора, запустіть екземпляр командного рядка як користувача адміністратора та введіть таку команду:

    echo %userdomain%
    
  2. Відповіді, надані Керреком СБ та Ед Грівз , виконають цільовий файл під користувачем адміністратора, але, якщо файл - це командний скрипт (.bat файл) або сценарій VB (.vbs-файл), який намагається працювати за допомогою нормального входу Середовище користувача (наприклад, зміна записів реєстру), можливо, ви не отримаєте бажаних результатів, оскільки середовище, під яким насправді працює сценарій, буде оточуючим користувачем адміністратора, а не користувачем звичайного входу! Наприклад, якщо файл являє собою скрипт, який працює в вулику HKEY_CURRENT_USER реєстру, постраждалим "поточним користувачем" буде користувач адміністратора, а не звичайний користувач.


0

Використовуйте повний фізичний диск \ шлях до цільового пакетного файлу в розділі Властивості ярлика.

Це не працює в Windows 10, якщо ви використовуєте субстати, як я намагався зробити спочатку ...

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