관리자로서 배치 파일을 자동으로 실행할 수 있습니까?


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없이 작동 말한다
barlop

나를 위해 .bat는 두 번 클릭해도 현재 디렉토리에서 바로 가기가 실행되지 않습니다. 바로 가기의 "시작 :"속성이 채워진 경우에도 마찬가지입니다. 따라서 .bat가 전체 파일 경로를 지정해야합니다.
Rob Mosher

29

다른 질문에 대한 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"
:--------------------------------------

예, 이것을 찾았고 현재 사용하고 있습니다. 어쨌든 고마워!
Antp

본질적으로 내가 찾던 것. VB를 사용하지 않고이를 수행 할 수있는 방법이 있기를 바랐습니까?
Chef Pharaoh

@ChefPharaoh 이것은 배치 파일을 실행하기 위해 관리자 콘솔을 만듭니다. powershell 스크립트를 사용하여 동일한 작업을 수행 할 수 있습니다.
jiggunjer

이것이 저에게 가장 좋은 대답이었습니다.
kasperhj

4

받아 들여진 대답은 실제로 작동합니다. 그러나 Windows 7에서는 바로 가기를 누를 때마다 UAC 대화 상자를 견뎌야한다는 것을 알았습니다. 이 IMHO는이 질문의 "자동"과는 크게 다릅니다!

그런 다음 내 상황 .bat에서 문제 의 파일이 작업 스케줄러에서 실행 된다는 것을 알았습니다 . 이 경우 작업 탭 에서 Run with highest privileges옵션을 확인 General하면 문제를 잘 처리 할 수 ​​있습니다. 은 .bat다음 번거 로움없이 관리자 권한으로 실행됩니다.

추신 : 나는이 답변에 이미지를 업로드 할 수 없다는 것을 알지 못했습니다. 왜냐하면 지금 나와 함께 앉아있는 멋진 작은 스크린 샷이 있기 때문입니다! 아니면 할 수 있습니까?


2
이미지에 링크를 추가하면 누군가가 이미지를 인라인으로 표시합니다.
Ramhound

@Ramhound. 이미지에 링크를 추가 하시겠습니까? 이미지는 온라인이 아닌 데스크탑에 있습니다. 아니면 뭔가 빠졌습니까?
Ifedi Okonkwo

예; 당신은 그들을 업로드; 스크린 샷을 답변에 인라인 할 수는 없습니다.
Ramhound

업로드 버튼이 없거나 어제 반맹 인이었습니다! 나는 그것이 후자라고 확신한다. 어쨌든, 파일 업로드를 매우 훌륭하게 완료했습니다. 이미지를 게시하려면 10의 담당자가 필요하다고 들었습니다. 그래도 고마워.
Ifedi Okonkwo

그래도 링크를 답변에 배치 할 수 있습니다.
Ramhound

4

Windows 7에서

  1. 해당 배치 파일에 대한 바로 가기 만들기

  2. 바로 가기 파일을 마우스 오른쪽 버튼으로 클릭

  3. 관리자로 실행하기위한 확인란을 찾으 려면 고급 버튼 을 클릭하십시오

아래 스크린 샷을 확인하십시오

스크린 샷


1
귀하의 답변은 수락 된 답변과 동일합니다.
Antp

예, 방금 급한 모든 사람을위한 스크린 샷이있는 간단한 목록을 만들고 싶었습니다.
fedmich

3
누군가가 서두르면 대답을 위해 맨 아래로 스크롤하지 않을 것입니다. 어쨌든 감사합니다
Antp

3

내 스크립트 Batch_Admin을 사용하여 모든 유형의 Batch 자체 스크립트 또는 BAT 또는 .CMD에서 사용할 수 있도록 관리자를 자동으로 상승시킬 수 있습니다. 이 기능은 표준 도구를 사용하여 다른 Windows 시스템에서와 같은 방식으로 표준 환경에서 작업 할 수 있도록합니다. 여러 표준 및 내장 Windows 명령을 사용합니다. 다른 외부 스크립트를 사용하지 마십시오. 스크립트 배치뿐만 아니라 모든 프로그램을 관리자로 호출하는 데 사용할 수 있습니다. 작은 스크립트를 작성하면 Administartor 권한이 필요한 프로그램을 호출 할 수 있습니다. 검색 경로 폴더 (% 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"변수를 설정하면 메시지가 표시됩니다. 추가 정보를 제공하는 관리자의 권한을 즉시 전달하고 정보에 입각 한 결정을 내릴 수없는 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


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 panal을 일으키지 않습니까?
Antp

그 결과 ... 그러나 아무것도 아닌 것보다 낫습니다 ( "액세스 거부"참조).
T.Todua

실제로는 "자동"이 아닙니다.
Antp

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

슈퍼 유저에 오신 것을 환영합니다! 이것이 질문에 대한 답변이 될 수 있지만 그 이유를 설명 할 수 있다면 더 나은 답변이 될 것 입니다.
DavidPostill

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.