क्या प्रशासक के रूप में बैच फ़ाइल को स्वचालित रूप से चलाना संभव है


48

मुझे आश्चर्य है कि क्या बैच फ़ाइल पर डबल-क्लिक करने पर स्वचालित रूप से एक बैच फ़ाइल को व्यवस्थापक के रूप में खोलना संभव है , क्योंकि आदेशों को प्रशासनिक अधिकारों के साथ चलाने की आवश्यकता है।

नोट: मुझे पहले से ही फ़ाइल पर राइट-क्लिक करने और क्लिक करने के समाधान के बारे में पता है Run As Administrator, लेकिन यह एक स्वचालित समाधान नहीं है।



मैं इसे मेरे लिए काम करने में सक्षम था: stackoverflow.com/a/13811519/27928
Rohit

2
दो बाएँ क्लिक एक से अधिक स्वचालित कैसे होते हैं- और एक दायाँ क्लिक?
जिगगंजर

जवाबों:


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
त्रिकली

2
इफदी लिखते हैं, "स्वीकृत उत्तर [यह Tech1337 से एक]] वास्तव में काम करता है। लेकिन मैंने पाया कि विंडोज 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"
:--------------------------------------

हाँ, मैं यह पाया और इसे स्पष्ट रूप से उपयोग कर रहा हूँ। फिर भी धन्यवाद!
एंटप

अनिवार्य रूप से मैं क्या देख रहा था। उम्मीद थी कि वीबी का उपयोग किए बिना ऐसा करने का एक तरीका है?
शेफ फिरौन

@ChefPharaoh यह बैच फ़ाइल को चलाने के लिए एक उन्नत कंसोल बनाता है। आप एक शिल्पी लिपि के साथ भी ऐसा कर सकते हैं।
जिगगंजर

यह मेरे लिए सबसे अच्छा जवाब था।
कास्परज

4

स्वीकृत उत्तर वास्तव में काम करता है। लेकिन मैंने पाया कि विंडोज 7 में, मुझे हर बार शॉर्टकट क्लिक करने के बाद यूएसी संवाद को सहना पड़ता था। यह IMHO इस प्रश्न में "स्वचालित रूप से" से काफी अलग हो जाता है!

तब मैंने पाया कि अपनी स्थिति में, .batकार्य फ़ाइल को टास्क शेड्यूलर द्वारा चलाया जाना है। इस मामले में, कार्य Run with highest privilegesके Generalटैब पर विकल्प की जांच करना, अच्छी तरह से समस्या का ध्यान रखता है। .batतो किसी भी बाधाओं के बिना व्यवस्थापक के रूप में चलाया जाता है।

पुनश्च: मुझे नहीं पता था कि मैं इस उत्तर पर चित्र अपलोड नहीं कर सका, क्योंकि मेरे पास अभी मेरे साथ एक अच्छा सा स्क्रीनशॉट है! या कर सकता हूं?


2
यदि आप छवियों के लिए लिंक जोड़ते हैं तो कोई उन्हें आपके लिए इनलाइन करेगा।
रामहाउंड

@Ramhound। छवियों के लिंक जोड़ें? छवि मेरे डेस्कटॉप पर है, कहीं ऑनलाइन नहीं है। या, निश्चित रूप से मुझे कुछ याद आ रहा है?
इवेदी ओकोंकवो

हाँ; आप उन्हें अपलोड करें; आप बस अपने उत्तर में स्क्रीनशॉट को इनलाइन नहीं कर सकते।
रामहाउंड

या तो वह अपलोड बटन नहीं था, या मैं कल आधा अंधा था! मुझे यकीन है कि यह बाद वाला था। किसी भी तरह, मैंने फ़ाइल अपलोड को बहुत अच्छी तरह से पूरा किया, केवल यह बताया कि मुझे छवियों को पोस्ट करने के लिए 10 के प्रतिनिधि की आवश्यकता है। हालांकि धन्यवाद।
इवेदी ओकोंकवो

आप अभी भी उत्तर में लिंक रख सकते हैं।
रामहाउंड

4

विंडोज 7 पर

  1. उस बैच फ़ाइल का शॉर्टकट बनाएँ

  2. शॉर्टकट फ़ाइल को राइट-क्लिक करें

  3. व्यवस्थापक के रूप में चलाने के लिए चेकबॉक्स खोजने के लिए अग्रिम बटन पर क्लिक करें

नीचे दिए गए स्क्रीनशॉट की जाँच करें

स्क्रीनशॉट


1
आपका कहा स्वीकार किए गए उत्तर के समान है।
अंप

हां, मैं अभी जल्दी में है कि हर किसी के लिए स्क्रीनशॉट के साथ एक सरल सूची बनाना चाहता था।
फेडमीच

3
अगर किसी को जल्दी में है तो मुझे संदेह है कि वे उत्तर के लिए नीचे तक स्क्रॉल करेंगे। वैसे भी
21

3

आप किसी भी प्रकार की बैच की अपनी स्क्रिप्ट या BAT या .CMD में उपयोग के लिए व्यवस्थापिका को स्वचालित रूप से उन्नत करने के लिए मेरी स्क्रिप्ट Batch_Admin का उपयोग कर सकते हैं। यह फ़ंक्शन मानक उपकरणों पर और विभिन्न विंडोज सिस्टम में उसी तरह मानक वातावरण पर काम सुनिश्चित करता है। यह कई मानक और अंतर्निहित विंडोज कमांड का उपयोग करता है। किसी अन्य बाहरी स्क्रिप्ट का उपयोग न करें। इसका उपयोग किसी भी प्रोग्राम को एडमिनिस्ट्रेटर के रूप में कॉल करने के लिए किया जा सकता है, न कि केवल स्क्रिप्ट पर। यह एक छोटी स्क्रिप्ट बनाने के लिए पर्याप्त है, जो तब उस प्रोग्राम को कॉल करता है जिसे अनुमति व्यवस्थापक की आवश्यकता होती है। इसे किसी भी खोज पथ फ़ोल्डर (% PATH% से) में रखें।

इसका उपयोग करने के लिए, आप बस इसकी मूल बैच स्क्रिप्ट में निम्न पंक्ति (बिल्कुल) डालें, जिसे प्रशासक के रूप में चलाया जाना है। यह हमारी मूल स्क्रिप्ट के शीर्ष पर सबसे अच्छा किया जाता है और यह सबसे अच्छा है कि पहले, जिसे कॉल के माध्यम से आगे कहा जाएगा, कुछ उप-स्क्रिप्ट (नीचे विस्तृत विवरण देखें)।

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

यह किसी भी बाल स्क्रिप्ट के अंदर डाला जा सकता है, जिसे कॉल सिंटैक्स द्वारा बुलाया जाता है। एक संदेश प्रदर्शित करने के लिए जबकि यह अभी भी प्रशासक विशेषाधिकार नहीं है, जैसे। Batch_Admin कॉल करने से पहले 5 सेकंड के लिए सेकंड की संख्या पर चर "ShowAdminInfo" सेट करें

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

तो यह कैसे काम करता है:

• उपयोगकर्ता की अनुमति लेने के लिए VBScript के माध्यम से UAC.ShellExecute को कॉल करें

• बैच स्क्रिप्ट, या बैट या सीएमडी चलाता है

• स्क्रिप्ट कॉलर में कॉल में शामिल लंबे नाम के स्थान हो सकते हैं

• सभी मापदंडों को कमांड लाइन से पास की गई मास्टर स्क्रिप्ट को कॉल करें, जैसे कि कॉल का कोई प्रसारण नहीं था और स्क्रैच से कुछ शुरू करें, विशेष वर्णों के साथ, जैसे विस्मयादिबोधक चिह्न (!) और प्रतिशत (%), और भी! कोष्ठक के साथ ()

यदि कॉल उस निर्देशिका में जगह लेता है जहां यह स्क्रिप्ट मास्टर है तो एक मास्टर स्क्रिप्ट स्थान प्राप्त करता है

• यदि हम स्वयं को "ShowAdminInfo", उदाहरण के लिए सेट करते हैं तो सहायक संदेश प्रदर्शित करता है। 5 सेकंड के लिए जो अतिरिक्त जानकारी देने वाले प्रशासक के अधिकारों के तत्काल पारित होने और एक सूचित निर्णय की संभावना को रोक सकता है। सेटिंग के उदाहरण जिन्हें सेट किया जाना चाहिए: SET ShowAdminInfo = 5 डिफ़ॉल्ट रूप से, क्योंकि यह चर परिभाषित नहीं है, यह प्रदर्शित नहीं करता है।

• स्क्रिप्ट सिस्टम खोज पथ% PATH% और नेटवर्क संसाधन से भी कॉल कर रही है, जैसे: \ Computer \ share \ _tat

• आवश्यक सहायक फ़ाइलों को लिखने में गलतफहमी को रोकता है जब स्क्रिप्ट लगभग एक ही समय में कई 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

यह SOURCE भी काम करता है : https://social.technet.microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7b92/request-elevation-inside-cmdbatch-file


क्या आप अपना समाधान बता सकते हैं?
8

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 पैनल नहीं लाता है?
अंप

कि ऊपर लाता है ... हालांकि, यह कुछ भी नहीं की तुलना में बेहतर है ("पहुंच से वंचित" ..)
T.Todua

हालांकि, वास्तव में "स्वचालित" नहीं है, यह है
एनटीपी

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

का एक और संस्करण superuser.com/a/852877/375935
jiggunjer
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.