41

Мне интересно, можно ли автоматически открывать командный файл как администратор, когда вы дважды щелкаете на командном файле, потому что команды должны выполняться с правами администратора.

Примечание. Я уже знаю о решении щелкнуть правой кнопкой мыши файл и щелкнуть « Run As Administrator , но это не автоматическое решение.

9 ответов9

37

Да, вы можете запустить командный файл с правами администратора. К сожалению, вы не можете сделать это непосредственно из командного файла самостоятельно. Вам нужно было бы сначала создать ярлык этого командного файла и изменить свойства для этого ярлыка, чтобы эта работа работала.

Чтобы создать ярлык, есть много способов, но самый простой и быстрый способ - использовать опцию Отправить в контекстном меню.

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

Конечно, вы можете отправить ярлык куда угодно. Чтобы повысить пакетный файл для запуска с правами администратора, выполните следующие действия:

  1. Щелкните правой кнопкой мыши по ярлыку, который вы только что создали (он должен быть на рабочем столе или там, где вы его отправили)
  2. На вкладке «Ярлык» нажмите кнопку «Дополнительно ...».
  3. Установите флажок «Запуск от имени администратора» и нажмите кнопку «ОК», чтобы открыть как модальное окно, так и главное окно свойств.
  4. Запустите ярлык, дважды щелкнув по нему, и командный файл должен запускаться от имени администратора.
27

Как написано в ответе Бена Грипки на другой вопрос:

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

в Windows 7

  1. Создать ярлык для этого командного файла

  2. Щелкните правой кнопкой мыши файл ярлыка

  3. Нажмите кнопку продвижения, чтобы найти флажок для запуска от имени администратора

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

Скриншот

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 для получения пользовательских разрешений.

• Пакетный запуск скрипта, или 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)  ***
3

Принятый ответ действительно работает. Но я обнаружил, что в Windows 7 мне приходилось терпеть диалог UAC при каждом нажатии на ярлык. Это ИМХО значительно отвлекает от "автоматически" в этом вопросе!

Затем я обнаружил, что в моей собственной ситуации рассматриваемый файл .bat должен запускаться планировщиком задач. В этом случае, отметив опцию « Run with highest privileges на вкладке « General » задачи, она хорошо решает проблему. Затем .bat запускается от имени администратора без каких-либо хлопот.

PS: я не понимал, что я не могу загрузить изображения в этом ответе, потому что у меня есть симпатичный маленький скриншот прямо сейчас со мной! Или я могу?

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

1

В качестве альтернативы вы можете создать второй пакетный файл, что позволит вам запускать что угодно в качестве администратора, вводя пароль администратора только один раз. Пароль сохраняется в токене аутентификации и требует от реального компьютера знать, как его взломать.

runas /savecred /user:(domain)\(admin user) "(file path to exe,bat,whatever)"
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
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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .