¿Es posible ejecutar automáticamente un archivo por lotes como administrador?

¿Es posible ejecutar automáticamente un archivo por lotes como administrador?

Me pregunto si es posibleautomáticamenteabra un archivo por lotes como administrador cuando haga doble clic en el archivo por lotes, porque los comandos deben ejecutarse con derechos administrativos.

Nota: Ya conozco la solución de hacer clic derecho en el archivo y hacer clic en Run As Administrator, pero esta no es una solución automática.

Respuesta1

Sí, puede ejecutar un archivo por lotes con derechos administrativos. Desafortunadamente, no puede hacer esto directamente desde el archivo por lotes. Primero deberá crear un acceso directo de ese archivo por lotes y cambiar las propiedades de ese acceso directo para que esto funcione.

Para crear un acceso directo, hay muchas formas, pero la forma más sencilla y rápida es utilizar elEnviar aopción en el menú contextual.

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

Por supuesto, puedes enviar el acceso directo a donde quieras. Para elevar el archivo por lotes para ejecutarlo como administrador, siga los pasos a continuación:

  1. Haga clic derecho en el acceso directo que acaba de crear (debe estar en el escritorio o donde lo envíe) y seleccione "Propiedades".
  2. En la pestaña Acceso directo, haga clic en el botón Avanzado....
  3. Marque la casilla Ejecutar como administrador y presione Aceptar tanto en la ventana modal como en la ventana principal de propiedades.
  4. Ejecute el acceso directo haciendo doble clic en él y el archivo por lotes debería ejecutarse como administrador.

Respuesta2

Como se publicó enuna respuestade Ben Gripka a otra pregunta:

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

Respuesta3

en Windows 7

  1. Cree un acceso directo a ese archivo por lotes

  2. Haga clic derecho en el archivo de acceso directo

  3. Hacer clicbotón de avancepara encontrar una casilla de verificación para ejecutar como administrador

Mira la captura de pantalla a continuación

Captura de pantalla

Respuesta4

Puede utilizar mi script Batch_Admin para elevar automáticamente el administrador para su uso en cualquier tipo de script propio de Batch, o BAT o .CMD. Esta función asegura el trabajo en un entorno estándar, con herramientas estándar y de la misma forma en diferentes sistemas Windows. Utiliza varios comandos estándar e integrados de Windows. No utilice ningún otro script externo. Se puede utilizar para llamar a cualquier programa como administrador, no solo a los scripts por lotes. Basta con crear un pequeño script, que luego llama al programa que requiere permiso de Administrador. Coloque esto en cualquier carpeta PATH de búsqueda (desde %PATH%).

Para usarlo, simplemente inserte la siguiente línea (exactamente como) en su secuencia de comandos por lotes principal, que se ejecutará como Administrador. Esto se hace mejor en la parte superior de nuestro script principal y es mejor que primero, a los que se llamará mediante CALL, se encuentren algunos subguiones (consulte la explicación detallada a continuación).

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

Esto se puede insertar dentro de cualquier script secundario, llamado mediante la sintaxis CALL. Mostrar un mensaje mientras todavía no tiene privilegios de administrador, por ejemplo. durante 5 segundos antes de llamar a Batch_Admin, configure la variable "ShowAdminInfo" en la cantidad de segundos

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

Entonces, ¿cómo funciona?

• Llama a UAC.ShellExecute a través de VBScript para obtener permisos de usuario

• Lote ejecuta el script, o BAT o CMD

• La persona que llama mediante script puede tener espacios de nombre largos incluidos en la llamada entre comillas

• Devolver todos los parámetros de la llamada al script maestro pasado desde la línea de comando, como si no hubiera transmisión de la llamada y comenzar algo desde cero, también con caracteres especiales, como signos de exclamación (!) y porcentaje (%), y también con paréntesis ()

• Mantiene una ubicación de script maestro si la llamada se realizó en el directorio donde este script es el maestro.

• Auxiliar muestra un mensaje si configuramos ante nosotros la variable "ShowAdminInfo", por ej. durante 5 segundos lo que puede impedir el paso inmediato de los derechos del Administrador brindando información adicional y la posibilidad de una decisión informada. Ejemplos de configuración que se deben establecer: SET ShowAdminInfo=5 De forma predeterminada, debido a que esta variable no está definida, no se muestra.

• El script también llama en la ruta de búsqueda del sistema % PATH% y desde un recurso de red, como por ejemplo: \Computer\share\test.bat

• Evita malentendidos al escribir los archivos auxiliares necesarios cuando el script llama a varios Batch_Admin casi al mismo tiempo. Utiliza el número aleatorio del 1 al 100.

• Pero lo mejor es usarlo en el script principal. La transición a derechos de Administrador siempre requiere que ejecute el script completamente nuevamente, en una nueva ventana, en un nuevo entorno, sin recurrir a las variables configuradas previamente en nuestro script y los valores de estas variables no pasaron luego para llamar como Administrador. . Sólo el script se ejecutará nuevamente.

Debajo de un script completo Batch_Admin. Información ampliada sobre esto está en mi sitio.

Copie el siguiente texto en el Bloc de notas y guárdelo en el disco como: 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)  ***

información relacionada