Para establecer una variable en la salida de un comando, use for /f
:
for /f "tokens=*" %%a in ('command') do set _CmdResult=%%a
El problema es utilizar un tubo en el comando que necesita para escapar de ella con el carácter de escape de línea de comandos: ^
Por lo tanto: ^|
.
for /f "tokens=*" %%a in ('sc \\192.168.1.1 query <ServiceName> ^| findstr STATUS') do set _CmdResult=%%a
Ahora, no estoy seguro de qué versión de Windows está ejecutando, pero mis intentos de una sc
consulta en Windows 7 dan el siguiente resultado:
>sc query SamSs
SERVICE_NAME: SamSs
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
Esto significa findstr STATE
que sería necesario, lo que da el resultado:
>sc query SamSs | findstr STATE
STATE : 4 RUNNING
Ahora, en el ejemplo anterior, tokens=*
significa que cada ficha se establece en la variable %%a
, donde las fichas están separadas por espacios. En este caso, puede usar el tercer token ( 4
) o el cuarto token ( RUNNING
). Por cierto, con las pruebas, 1
corresponde a STOPPED
mí.
Para facilitar las cosas, usaré la cadena RUNNING
en este ejemplo. Entonces queremos la cuarta ficha.
for /f "tokens=4" %%a in ('sc \\192.168.1.1 query <ServiceName> ^| findstr STATE') do set _CmdResult=%%a
Por supuesto, dependiendo de cuáles sean sus sc query
resultados, los suyos pueden ser ligeramente diferentes, así que siga cómo llegué allí y modifique según sea necesario. O publique en un comentario el resultado de su sc query
y lo modificaré según sea necesario.
Para verificar el valor, puede usar:
if %_CmdResult%==STOPPED (
REM do something here
)
En su caso, el ciclo sería algo como esto.
:loop
for /f "tokens=*" %%a in ('sc \\192.168.1.1 query <ServiceName> ^| findstr STATUS') do set _CmdResult=%%a
if %_CmdResult%==STOPPED (
sc \\192.168.1.1 start <ServiceName>
goto endloop
)
timeout /t 5
goto loop
:endloop
Tenga en cuenta que timeout
es una utilidad que solo se incluye en Windows Vista y versiones posteriores. Windows XP puede usar algo como ping 1.1.1.1 -n 1 -w 5000 > nul
.
^|
estar| was unexpected at this time.
sin él.Un ejemplo más avanzado con mayor nivel de complejidad.
(pero también mayor usabilidad)
cURL
,GREP
,SED
) usted puede descargar un Win32 pre-construir versiones de esos o utilizar cygwin archivos exe 's en Windows- tanto funciona perfectamente bien (para cygwin, mejor sólo hay que ponerc:\cygwin\bin\
ubicación de la carpeta en su sistemaPATH
variable para un acceso más fácil )|
,>
,&
) - las mejores prácticas / requerido en Windows 7 +.curl
encabezado de respuestaContent-Length
)Y ... ¡ NO HAY ARCHIVOS TEMPORALES!
saldrá
it is 41MB
(el encabezado original es
Content-Length: 43597312
)lo tomé de aquí: - CMD / Bash Script Ninja - Manipulación del número de encabezado de respuesta cURL
fuente
Es posible que desee consultar PsTools de Microsoft (Sysinternals). Existe una herramienta llamada PsService donde puede verificar de forma remota los servicios a través del parámetro
\\computer
fuente
es solo un ejemplo para saber cómo puede "establecer aaa" fuera "aaa = 1 toto" la primera une () fuera "aaa = 1 toto" pero la línea solo después de decir "Variable de entorno aaa no definida"
fuente