Bir toplu iş dosyasını yönetici olarak otomatik olarak çalıştırmak mümkün mü


48

Toplu iş dosyasını çift tıklattığınızda toplu iş dosyasını yönetici olarak otomatik olarak açmanın mümkün olup olmadığını merak ediyorum , çünkü komutların yönetici haklarıyla çalıştırılması gerekiyor.

Not: Dosyaya sağ tıklamanın ve tıklamanın çözümü hakkında zaten bir bilgim var Run As Administrator, ancak bu otomatik bir çözüm değil.



Bunun benim için çalışmasını sağlayabildim: stackoverflow.com/a/13811519/27928
Rohit

2
İki sol tıklama bir sol ve bir sağ tıklamadan daha otomatik nasıl yapılır?
jiggunjer

Yanıtlar:


44

Evet, yönetici haklarına sahip bir toplu iş dosyası çalıştırabilirsiniz. Maalesef, bunu doğrudan kendisinden oluşan toplu iş dosyasından yapamazsınız. Bu işlemi yapabilmek için önce bu toplu iş dosyasının bir kısayolunu oluşturmanız ve bu kısayolun özelliklerini değiştirmeniz gerekir.

Kısayol oluşturmak için birçok yol vardır, ancak en basit ve en hızlı yol, bağlam menüsündeki Gönder seçeneğini kullanmaktır .

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

Elbette istediğiniz kısayola kısayol gönderebilirsiniz. Toplu iş dosyasını yönetici olarak çalışacak şekilde yükseltmek için aşağıdaki adımları izleyin:

  1. Yeni oluşturduğunuz kısayolu sağ tıklayın (masaüstünde ya da nereye gönderdiğinizde olmalı)
  2. Kısayol sekmesinin altındaki Gelişmiş ... düğmesini tıklatın.
  3. Yönetici olarak çalıştır onay kutusunu işaretleyin ve hem kalıcı hem de ana özellikler penceresinde OK (Tamam) düğmesine basın.
  4. Kısayolu çift tıklatarak çalıştırın; toplu iş dosyası yönetici olarak çalıştırılmalıdır.

1
Toplu iş dosyasını her zaman kısayolu çağırmaya zorlayabilir ve kısayolun kısayolu çağırmamak için bir parametre geçirmesini sağlayabilirsiniz. if "%~1" == "" start %USERPROFILE%\Desktop\Shortcut.lnk && GOTO :EOFHemen aşağıya benzer bir şey ekler @echo offve kısayolun program.bat ayerine yerine bağlantı vermesini sağlarsınız program.bat.
trlkly

2
Ifedi, "Kabul edilen cevap [Tech1337’den gelen bu] gerçekten işe yarıyor. Ancak Windows 7’de, kısayol her tıklandığında UAC iletişimine katlanmak zorunda kaldığımı gördüm." <- Başkası UAC olmadan çalıştığını söylese de
barlop

Benim için kısayol, çift tıkladığınızda geçerli dizinde .bat olsa da çalışmaz. Kısayoldaki "Başlat:" özelliği ile bile doldurulmuş. Bu nedenle, .bat dosyanızın tam dosya yollarını belirlediğinden emin olun.
Rob Mosher,

29

Ben Gripka tarafından başka bir soruya verilen cevabın yayınladığı gibi :

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

Evet bunu buldum ve currnetly kullanıyorum. Yine de teşekkürler!
Karınca

Temelde aradığım şey. VB kullanmadan bunu yapmanın bir yolu var mıydı?
Şef Firavun

@ChefPharaoh bu toplu iş dosyasını çalıştırmak için yükseltilmiş bir konsol oluşturur. Aynı şeyi powershell betiğiyle yapabilirsiniz.
jiggunjer

Bu benim için en iyi cevaptı.
kasperhj

4

Kabul edilen cevap gerçekten işe yarıyor. Ancak Windows 7'de, kısayol her tıklandığında UAC iletişim kutusuna katlanmak zorunda kaldığımı öğrendim. Bu IMHO, bu sorudaki “otomatik” den önemli ölçüde düşüyor!

Sonra kendi durumumda, söz konusu .batdosyanın Görev Zamanlayıcısı tarafından çalıştırılacağını öğrendim . Bu durumda, görev sekmesindeki Run with highest privilegesseçeneği kontrol etmek General, sorunu güzel bir şekilde halleder. Daha .batsonra herhangi bir sorun olmadan yönetici olarak çalıştırılır.

Not: Bu cevapta resim yükleyemedim, çünkü şu anda yanımda oturan hoş bir ekran görüntüsü var! Yoksa yapabilir miyim?


2
Resimlere link eklerseniz, birileri sizin için sıraya girer.
Ramhound

@Ramhound. Resimlere linkler eklensin mi? Resim çevrimiçi değil, masaüstümde. Ya da, kesinlikle bir şey eksik?
Ifedi Okonkwo

Evet; Onları sen yüklüyorsun; Ekran görüntülerini sizin cevabınıza sığdıramazsınız.
Ramhound

Ya o yükleme butonu orada değildi ya da dün yarı kör oldum! İkincisi olduğuna eminim. Her neyse, dosya yükleme işlemini çok güzel bir şekilde tamamladım. Yine de teşekkürler.
Ifedi Okonkwo 8:14

Yine de bağlantıya cevabı verebilirsiniz.
Ramhound

4

Windows 7'de

  1. Bu Toplu İş dosyasına bir kısayol oluşturma

  2. Kısayol dosyasını sağ tıklayın

  3. Yönetici olarak çalıştırmak için bir onay kutusu bulmak için avans düğmesini tıklayın

Aşağıdaki ekran görüntüsünü kontrol edin

Ekran görüntüsü


1
Demek istediğin cevap aynı.
Karınca

Evet, acelesi olan herkes için ekran görüntüsü ile basit bir liste oluşturmak istedim.
Şubat'ta

3
Eğer birisi acelesi varsa, cevap için aşağıya ineceklerinden şüpheliyim. Yine de
teşekkürler

3

Komutum Batch_Admin'i, herhangi bir Batch kendi komut dosyasında veya BAT veya .CMD'de kullanmak üzere Yöneticiyi otomatik olarak yükseltmek için kullanabilirsiniz. Bu işlev, standart bir ortamda, standart araçlarla ve aynı şekilde farklı Windows sistemlerinde çalışmayı sağlar. Birkaç standart ve yerleşik Windows komutları kullanır. Başka hiçbir harici komut dosyası kullanmayın. Herhangi bir programı Yönetici olarak çağırmak için kullanılabilir, yalnızca Batch komut dosyalarını değil. Daha sonra izin Yönetici gerektiren programı çağıran küçük bir komut dosyası oluşturmak yeterlidir. Bunu herhangi bir arama PATH klasörüne yerleştirin (% PATH% 'den).

Kullanmak için, aşağıdaki satırı (aynen gibi) Yönetici olarak çalıştırılacak olan üst Batch betiğine ekleyin. Bu en iyi üst betiğimizin en üstünde yapılır ve en iyisi ilk olarak CALL aracılığıyla bazı alt betiği üzerinden çağrılacaktır (aşağıdaki ayrıntılı açıklamaya bakınız).

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

Bu, CALL sözdizimi tarafından adlandırılan herhangi bir alt komut dosyasının içine eklenebilir. Bir mesajı hala Yönetici ayrıcalıklarına sahip değilken göstermek için, örn. Batch_Admin çağrılmadan önce 5 saniye boyunca "ShowAdminInfo" değişkenini saniye sayısına ayarlayın

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

Peki nasıl çalışır:

• Kullanıcı izinlerini almak için UBS.ShellExecute'u VBScript aracılığıyla çağırır

• Toplu komut dosyasını çalıştırır veya BAT veya CMD

• Script arayan, çağrıya tırnak içine alınmış uzun bir ad alanına sahip olabilir.

• Tüm parametreleri geri çağırın, sanki çağrı iletimi yokmuş gibi komut satırından geçen ana betiği arayın ve ünlem işareti (!) Ve yüzdesi (%) gibi özel karakterlerle ve aynı zamanda sıfırdan bir şey başlatın. parantezli ()

• Çağrı, bu komut dosyasının ana olduğu dizinde gerçekleşirse, bir ana komut dosyası konumu tutar.

• Yardımcı, kendimizden önce "ShowAdminInfo" değişkenini ayarlarsak, örneğin bir mesaj görüntüler. 5 saniye boyunca Yönetici haklarının derhal geçişini önleyebilir ve ek bilgi verir ve bilinçli bir karar verebilir. Ayarlanması gereken ayar örnekleri: SET ShowAdminInfo = 5 Varsayılan olarak, bu değişken tanımlanmadığı için görüntülenmez.

• Betik ayrıca% PATH% sistem arama yolunda ve aşağıdaki gibi ağ kaynağından da çağırıyor: \ Computer \ share \ test.bat

• Senaryo neredeyse aynı anda birkaç Batch_Admin çağırdığında, gerekli dosyaları yazarken yanlış anlamaları önler. 1'den 100'e kadar rasgele sayı kullanır

• Ancak, en iyisi üst komut dosyasında kullanmaktır. Yönetici haklarına geçiş her zaman komut dosyasını tamamen yeniden çalıştırmanızı gerektirir, yeni bir pencerede, yeni bir ortamda, önceden komut dosyamızda ayarlanan değişkenlere başvurmadan ve bu değişkenlerin değerleri Yönetici olarak çağırmak için geçmedi . Sadece senaryo tekrar çalıştırılacak.

Batch_Admin tam bir betiğinin altında. Bu konuda genişletilmiş bilgi sitemde.

Aşağıdaki metni Not Defteri'ne kopyalayın ve diske farklı kaydedin: 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)  ***

Bunun yukarıdaki cevaba benzer ya da aynı olduğunu düşünüyorum: superuser.com/a/852877/375935
jiggunjer

1

Alternatif olarak, ikinci bir toplu iş dosyası oluşturabilirsiniz; bu, yönetici olarak herhangi bir şeyi çalıştırmanıza izin verirken, yalnızca bir kez yönetici şifresini girmenize izin verebilir. Parola bir kimlik doğrulama belirtecine kaydedilir ve bazı gerçek bilgisayarların nasıl çözüleceğini bilmesini sağlar.

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

Bu aynı zamanda KAYNAK çalışır : https://social.technet.microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7f92/request-elevation-inside-cmdbatch-file


Çözümünüzü açıklayabilir misiniz?
scai

1
Başka bir sürümü superuser.com/a/852877/375935
jiggunjer

0

Bir komut satırı yardımcı programı kullanabilirsiniz elevate. (indirme bağlantısı - 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

Bu bir UAC panosu getirmiyor mu?
Karınca

Bu ...
büyüyor

Gerçi gerçekten "otomatik" değil, öyle
Antp

0

Yarasa yönetici olarak çalıştırmak için bir örnek. Benim için çalışıyor.

Bu böyle devam ediyor:

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

Süper Kullanıcıya Hoşgeldiniz! Bu soruya cevap verebilse de, neden böyle olduğunu açıklayabilirseniz daha iyi bir cevap olabilir .
DavidPostill

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.