Apakah mungkin menjalankan file batch secara otomatis sebagai administrator

48

Saya bertanya-tanya apakah mungkin untuk secara otomatis membuka file batch sebagai admin ketika Anda mengklik dua kali pada file batch, karena perintah harus dijalankan dengan hak administratif.

Catatan: Saya sudah tahu tentang solusi mengklik kanan pada file dan mengklik Run As Administrator, tetapi ini bukan solusi otomatis.

Antp
sumber
Saya bisa membuat ini bekerja untuk saya: stackoverflow.com/a/13811519/27928
Rohit
2
bagaimana dua klik kiri lebih otomatis daripada satu klik kiri dan satu klik kanan?
jiggunjer

Jawaban:

44

Ya, Anda dapat menjalankan file batch dengan hak administratif. Sayangnya, Anda tidak dapat melakukan ini langsung dari file batch itu sendiri. Anda harus terlebih dahulu membuat pintasan dari file kumpulan itu dan mengubah properti untuk pintasan itu agar dapat berfungsi.

Untuk membuat jalan pintas, ada banyak cara tetapi cara paling sederhana dan tercepat adalah dengan menggunakan opsi Kirim ke dalam menu konteks.

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

Tentu saja Anda dapat mengirim pintasan ke tempat yang Anda inginkan. Untuk meninggikan file batch untuk dijalankan sebagai admin, ikuti langkah-langkah di bawah ini:

  1. Klik kanan pintasan yang baru saja Anda buat (harus di desktop atau di mana pun Anda mengirimnya)
  2. Di bawah tab Shortcut, klik tombol Advanced ....
  3. Centang kotak Jalankan sebagai administrator dan tekan OK untuk jendela modal dan jendela properti utama.
  4. Jalankan pintasan dengan mengklik dua kali dan file batch harus dijalankan sebagai administrator.
10100111001
sumber
1
Anda selalu dapat memaksa file batch untuk memanggil pintasan, dan minta pintasan meneruskan parameter untuk mengetahui untuk tidak memanggil pintasan. Anda akan memasukkan sesuatu seperti if "%~1" == "" start %USERPROFILE%\Desktop\Shortcut.lnk && GOTO :EOFdi bawah ini @echo off, dan buat tautan pintasan ke program.bat abukan hanya program.bat.
trlkly
2
Ifedi menulis "Jawaban yang diterima [yang ini dari Tech1337] memang bekerja. Tapi saya menemukan bahwa di Windows 7, saya harus menanggung dialog UAC setiap kali pintasan diklik." <- Meskipun orang lain mengatakan itu bekerja tanpa UAC
barlop
Bagi saya jalan pintas tidak berjalan di direktori saat ini ketika diklik ganda, meskipun .bat tidak. Bahkan dengan properti "Mulai di:" pada pintasan terisi. Jadi pastikan .bat Anda menentukan path file lengkap.
Rob Mosher
29

Seperti yang diposting dalam jawaban oleh Ben Gripka untuk pertanyaan lain:

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"
:--------------------------------------
pengguna399109
sumber
Ya saya menemukan ini dan saya menggunakannya saat ini. Bagaimanapun, terima kasih!
Antp
Intinya apa yang saya cari. Apakah berharap ada cara untuk melakukan ini tanpa menggunakan VB?
Chef Firaun
@ ChefPharaoh ini membuat konsol yang ditinggikan untuk menjalankan file batch. Anda dapat melakukan hal yang sama dengan skrip PowerShell.
jiggunjer
Ini jawaban terbaik untukku.
kasperhj
4

Jawaban yang diterima memang bekerja. Tetapi saya menemukan bahwa di Windows 7, saya harus menanggung dialog UAC setiap kali pintasan diklik. IMHO ini mengurangi secara signifikan dari "otomatis" dalam pertanyaan ini!

Kemudian saya menemukan bahwa dalam situasi saya sendiri, .batfile yang dimaksud harus dijalankan oleh Penjadwal Tugas. Dalam hal ini, memeriksa Run with highest privilegesopsi pada Generaltab tugas, menangani masalah dengan baik. Ini .batkemudian dijalankan sebagai administrator tanpa kerepotan.

PS: Saya tidak sadar bahwa saya tidak dapat mengunggah gambar pada jawaban ini, karena saya memiliki tangkapan layar kecil yang bagus sekarang! Atau bisakah saya?

Ifedi Okonkwo
sumber
2
Jika Anda menambahkan tautan ke gambar seseorang akan memberikannya untuk Anda.
Ramhound
@Ramhound. Tambahkan tautan ke gambar? Gambar ada di desktop saya, bukan di suatu tempat online. Atau, pasti saya melewatkan sesuatu?
Ifedi Okonkwo
Iya nih; Anda mengunggahnya; Anda tidak bisa memasukkan screenshot ke dalam jawaban Anda.
Ramhound
Entah tombol unggah itu tidak ada di sana, atau aku setengah buta kemarin! Saya yakin itu yang terakhir. Bagaimanapun, saya menyelesaikan unggahan file dengan sangat baik, hanya untuk diberitahu bahwa saya memerlukan 10 rep untuk memposting gambar. Terimakasih Meskipun.
Ifedi Okonkwo
Anda masih dapat menempatkan tautan dalam jawaban.
Ramhound
4

pada Windows 7

  1. Buat pintasan ke file Batch itu

  2. Klik kanan file pintasan

  3. Klik tombol maju untuk menemukan kotak centang untuk berjalan sebagai administrator

Periksa tangkapan layar di bawah ini

Tangkapan layar

fedmich
sumber
1
Pepatah Anda sama dengan jawaban yang diterima.
Antp
Ya, saya hanya ingin membuat daftar sederhana dengan tangkapan layar untuk semua orang yang sedang terburu-buru.
fedmich
3
Jika seseorang sedang terburu-buru, saya ragu mereka akan mencari
jawabannya. Terima kasih
3

Anda dapat menggunakan skrip saya Batch_Admin untuk secara otomatis meninggikan Administrator untuk digunakan dalam semua jenis skrip Batch sendiri, atau BAT atau .CMD. Fungsi ini memastikan pekerjaan pada lingkungan standar, dengan alat standar dan dengan cara yang sama di berbagai sistem Windows. Ini menggunakan beberapa perintah Windows standar dan built-in. Jangan gunakan skrip eksternal lainnya. Dapat digunakan untuk memanggil program apa pun sebagai Administrator, bukan hanya skrip Batch. Cukuplah untuk membuat skrip kecil, yang kemudian memanggil program yang memerlukan izin Administartor. Tempatkan ini di folder PATH pencarian apa saja (dari% PATH%).

Untuk menggunakannya, Anda cukup memasukkan baris berikut (persis seperti) di skrip Batch induknya, yang akan dijalankan sebagai Administrator. Ini paling baik dilakukan di bagian atas skrip induk kami dan yang terbaik adalah yang pertama, yang akan dipanggil melalui CALL lebih lanjut, beberapa sub-skrip (lihat penjelasan terperinci di bawah).

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

Ini dapat dimasukkan ke dalam skrip anak apa saja, yang disebut oleh sintaks CALL. Untuk menampilkan pesan saat masih belum memiliki hak Administrator, mis. selama 5 detik sebelum memanggil Batch_Admin setel variabel "ShowAdminInfo" pada jumlah detik

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

Jadi cara kerjanya:

• Memanggil UAC.ShellExecute melalui VBScript untuk mengambil izin pengguna

• Batch menjalankan skrip, atau BAT atau CMD

• Penelepon skrip dapat memiliki ruang nama panjang yang termasuk dalam panggilan dalam tanda kutip

• Kembalikan semua parameter panggilan script master yang dilewatkan dari baris perintah, seolah-olah tidak ada transmisi panggilan dan mulai sesuatu dari awal, juga dengan karakter khusus, seperti tanda seru (!) Dan persentase (%), dan juga dengan tanda kurung ()

• Memegang lokasi skrip master jika panggilan berlangsung di direktori di mana skrip ini adalah master

• Auxiliary menampilkan pesan jika kita mengatur sendiri variabel "ShowAdminInfo", mis. selama 5 detik yang dapat mencegah berlalunya segera hak-hak Administrator memberikan informasi tambahan dan kemungkinan keputusan yang diinformasikan. Contoh pengaturan yang harus ditetapkan: SET ShowAdminInfo = 5 Secara default, karena variabel ini tidak ditentukan, tidak ditampilkan.

• Skrip memanggil juga di jalur pencarian sistem% PATH% dan dari sumber daya jaringan, seperti: \ Computer \ share \ test.bat

• Mencegah kesalahpahaman dalam menulis file tambahan yang diperlukan ketika skrip memanggil beberapa Batch_Admin hampir secara bersamaan. Ini menggunakan nomor acak dari 1 hingga 100

• Tapi, yang terbaik adalah menggunakannya pada skrip induk. Transisi ke hak Administrator selalu mengharuskan Anda menjalankan skrip sepenuhnya lagi, di jendela baru, di lingkungan baru, tanpa bantuan ke variabel yang ditetapkan sebelumnya dalam skrip kami dan nilai-nilai variabel ini tidak lulus kemudian memanggil sebagai Administrator . Hanya script yang akan dieksekusi lagi.

Di bawah ini skrip lengkap Batch_Admin. Informasi tambahan tentang ini ada di situs saya.

Salin teks berikut ke Notepad dan simpan ke disk sebagai: 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)  ***
Artur Zgadzaj
sumber
Saya pikir ini mirip atau identik dengan jawaban di atas: superuser.com/a/852877/375935
jiggunjer
1

Atau Anda dapat membuat file batch kedua, ini dapat memungkinkan Anda untuk menjalankan apa pun sebagai administrator, sementara hanya memasukkan kata sandi administrator sekali. Kata sandi disimpan dalam token otentikasi, dan membuat beberapa komputer nyata tahu cara memecahkannya.

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

Ini juga berfungsi SUMBER: https://social.technet.microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7f92/request-elevation-inside-cmdbatch-file

Josue Moreno Cervantes
sumber
Bisakah Anda menjelaskan solusinya?
scai
1
Versi lain dari superuser.com/a/852877/375935
jiggunjer
0

Anda dapat menggunakan utilitas baris perintah elevate. (tautan unduhan - 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
T.Todua
sumber
Bukankah ini memunculkan kepanikan UAC?
Antp
yang memunculkan ... namun, itu lebih baik, daripada tidak ada (melihat "akses ditolak" ..)
T.Todua
Tidak benar-benar "otomatis", kan
Antp
0

Ini adalah contoh untuk menjalankan pemukul sebagai administrator. Ini bekerja untuk saya.

Bunyinya seperti ini:

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
JoshMoreNo
sumber
Selamat Datang di Pengguna Super! Meskipun ini mungkin menjawab pertanyaan, itu akan menjadi jawaban yang lebih baik jika Anda bisa memberikan penjelasan mengapa itu bisa terjadi.
DavidPostill
Varian lain dari superuser.com/a/852877/375935
jiggunjer