Bạn có thể sử dụng tập lệnh Batch_Admin của tôi để tự động nâng Quản trị viên để sử dụng trong mọi loại tập lệnh riêng của Batch hoặc BAT hoặc .CMD. Chức năng này đảm bảo hoạt động trên môi trường tiêu chuẩn, với các công cụ tiêu chuẩn và theo cùng một cách trong các hệ thống Windows khác nhau. Nó sử dụng một số lệnh Windows tiêu chuẩn và tích hợp. Không sử dụng bất kỳ tập lệnh bên ngoài khác. Nó có thể được sử dụng để gọi bất kỳ chương trình nào là Quản trị viên, không chỉ các tập lệnh Batch. Nó đủ để tạo ra một tập lệnh nhỏ, sau đó gọi chương trình yêu cầu quyền quản trị. Đặt cái này trong bất kỳ thư mục PATH tìm kiếm nào (từ% PATH%).
Để sử dụng nó, bạn chỉ cần chèn dòng sau (chính xác là) vào tập lệnh Batch gốc của nó, được chạy với tư cách Quản trị viên. Điều này được thực hiện tốt nhất ở đầu tập lệnh gốc của chúng tôi và tốt nhất là trước tiên, sẽ được gọi thông qua CALL hơn nữa, một số tập lệnh phụ (xem giải thích chi tiết bên dưới).
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Điều này có thể được chèn vào bên trong bất kỳ tập lệnh con nào, được gọi bằng cú pháp CALL. Để hiển thị một thông báo trong khi nó vẫn không có đặc quyền Quản trị viên, vd. trong 5 giây trước khi gọi Batch_Admin, đặt biến "ShowAdminInfo" trên số giây
SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Vì vậy, làm thế nào nó hoạt động:
• Gọi UAC.ShellExecute thông qua VBScript để nhận quyền của người dùng
• Batch chạy tập lệnh, hoặc BAT hoặc CMD
• Trình gọi tập lệnh có thể có một không gian tên dài được bao gồm trong cuộc gọi trong dấu ngoặc kép
• Trả lại tất cả các tham số gọi tập lệnh chính được truyền từ dòng lệnh, như thể không có truyền cuộc gọi và bắt đầu một cái gì đó từ đầu, cũng với các ký tự đặc biệt, như dấu chấm than (!) Và phần trăm (%), và cả với dấu ngoặc đơn ()
• Giữ một vị trí tập lệnh chính nếu cuộc gọi diễn ra trong thư mục nơi tập lệnh này là chủ
• Phụ trợ hiển thị thông báo nếu chúng ta tự đặt trước biến "ShowAdminInfo", vd. trong 5 giây có thể ngăn chặn ngay lập tức các quyền của Quản trị viên cung cấp thêm thông tin và khả năng có quyết định sáng suốt. Ví dụ về cài đặt phải được đặt: SET ShowAdminInfo = 5 Theo mặc định, vì biến này không được xác định, nó không hiển thị.
• Tập lệnh cũng đang gọi trong đường dẫn tìm kiếm hệ thống% PATH% và từ tài nguyên mạng, chẳng hạn như: \ Computer \ share \ test.bat
• Ngăn chặn sự hiểu lầm trong việc viết các tệp phụ trợ cần thiết khi tập lệnh gọi một số Batch_Admin gần như cùng một lúc. Nó sử dụng số ngẫu nhiên từ 1 đến 100
• Nhưng, tốt nhất là sử dụng nó trên tập lệnh gốc. Việc chuyển đổi sang quyền Quản trị viên luôn yêu cầu bạn chạy lại tập lệnh hoàn toàn, trong một cửa sổ mới, trong một môi trường mới, không cần truy vấn các biến được đặt trước đó trong tập lệnh của chúng tôi và các giá trị của các biến này không được chuyển qua để gọi là Quản trị viên . Chỉ cần kịch bản sẽ được thực hiện lại.
Bên dưới một kịch bản hoàn chỉnh Batch_Admin. Thông tin mở rộng về điều này là trên trang web của tôi.
Sao chép văn bản sau vào Notepad và lưu nó vào đĩa dưới dạng: 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) ***