2012-05-18 19 views
7

Vorrei eseguire comandi in un file batch su più computer.come faccio ad ottenere un file batch per accettare l'input da un file txt?

Ad esempio:

@echo off 
ping %1 
pause 
exit 

Se questo file batch sono stati chiamati pingme.bat e io tipo pingme.bat yahoo.com allora sarebbe rumore metallico yahoo.com. Il mio problema è che voglio che il file batch accetti l'input da un file di testo.

Così come pingme.bat computers.txt e leggerebbe i nomi dei computer elencati nel file e farebbe qualsiasi comando io specifichi di fare a loro.

%1 accetta l'input che specifica quando digito il file batch, ora desidero che il file batch legga le righe nel txt e lo faccia.

Le righe nel testo sono in formato elenco senza virgole o altro.

risposta

9

Un modo per farlo sarebbe quello di mettere gli URL in un file di testo in questo modo:

www.google.com
www.yahoo.com

quindi eseguire il seguente lotto

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

ed eseguirlo da cmd come pingme.bat URLs.txt

in alternativa, è possibile specificare il nome del file di testo all'interno del lotto, ed eseguirlo senza il parametro

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

Ecco un altro approccio

Questa particolare lotto tirerà dalla lista, e scrivere output.txt Se il ping ha avuto successo

@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%" 

Speriamo che ti mette nella giusta direzione.

+2

Perché SETLOCAL/ENDLOCAL all'interno del primo ciclo ?. Perché chiamare una subroutine in 2nd loop? In entrambi i casi si stanno rallentando le cose senza motivo che posso vedere. – dbenham

+0

@dbenham Buon punto. Questo è stato lasciato lì dopo aver modificato lo script per il post SO. La subroutine è semplicemente per l'organizzazione. Grazie. –

1

Si può utilizzare un ciclo FOR - salva questo come pingme.bat:

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

e chiamarlo con il file di testo come parametro di pingme.bat computers.txt.

0

per trovare indirizzi IP di più URL in file di testo e per ottenere il risultato in file di testo:

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

Salvare lo script come "ping.bat" e chiamare ping.bat URL.txt dal prompt dei comandi.

Problemi correlati