2012-05-18 17 views
7

Me gustaría ejecutar comandos en un archivo por lotes en varias computadoras.¿cómo obtengo un archivo por lotes para aceptar la entrada de un archivo txt?

Por ejemplo:

@echo off 
ping %1 
pause 
exit 

Si este archivo por lotes se llama pingme.bat y yo escriba pingme.bat yahoo.com entonces sería un ping yahoo.com. Mi problema es que quiero que el archivo por lotes acepte la entrada de un archivo de texto.

Como pingme.bat computers.txt y leerá los nombres de las computadoras enumeradas en el archivo y hará el comando que especifique que se les debe hacer.

%1 acepta la entrada que especifico cuando escribo el archivo por lotes, ahora me gustaría que el archivo por lotes lea las líneas en el txt y lo haga.

Las líneas en el texto están en forma de lista, no usan comas ni nada.

Respuesta

9

Una forma de hacerlo sería colocar las URL de un archivo de texto, así:

www.google.com www.yahoo.com

ejecute el siguiente lote

for /f %%a in (%1) do (
echo Pinging %%a... 
ping %%a 
) 

y ejecutarlo desde cmd como pingme.bat URLs.txt

Alternativamente, puede especificar el nombre del archivo de texto dentro del lote, y ejecutarlo sin el parámetro

for /f %%a in (URLs.txt) do (
echo Pinging %%a... 
ping %%a 
) 

Aquí hay otro enfoque

Este lote particular se tire de la lista, y escribir a Output.txt si el ping fue exitoso

@ECHO OFF 
SET output=output.txt 
IF EXIST "%output%" DEL "%output%" 
FOR /f %%a IN (URLs.txt) DO (
    CALL :ping %%a 

) 
GOTO :EOF 

:ping 
ping -n 1 %1 | find "Approximate round trip" >NUL || ECHO %1>>"%output%" 

suerte eso te pone en la dirección correcta.

+2

¿Por qué SETLOCAL/ENDLOCAL dentro del primer ciclo ?. ¿Por qué llamar a una subrutina en el segundo ciclo? En ambos casos, estás ralentizando las cosas sin ningún motivo que yo pueda ver. – dbenham

+0

@dbenham Buen punto. Eso quedó allí desde que se modificó el script para la publicación SO. La subrutina es simplemente para la organización. Gracias. –

1

Es posible utilizar un bucle FOR - guardar esto como pingme.bat:

FOR /F "tokens=*" %%L IN (%1) DO (
    ping %%L 
    pause 
) 

y llamarlo con el archivo de texto como parámetro pingme.bat computers.txt.

0

Para conocer las direcciones IP de múltiples URL en el archivo de texto y para obtener la salida en el archivo de texto:

FOR /F "tokens=*" %%L IN (%1) DO (
    nslookup %%L >> output.txt 
    pause 
) 

Guardar la secuencia de comandos como "ping.bat" y llaman ping.bat URL.txt desde la línea de comandos.

Cuestiones relacionadas