2012-05-18 8 views
7

Chciałbym uruchomić polecenia w pliku wsadowym na wielu komputerach.Jak uzyskać plik wsadowy do akceptowania danych wejściowych z pliku txt?

Na przykład:

@echo off 
ping %1 
pause 
exit 

Jeśli ten plik wsadowy nazywano pingme.bat i wpisuję pingme.bat yahoo.com wtedy byłoby ping yahoo.com. Mój problem polega na tym, że chcę, aby plik wsadowy akceptował dane wejściowe z pliku tekstowego.

Tak jak w przypadku pingme.bat computers.txt i odczyta nazwy komputerów wymienionych w pliku i wykona wszystkie polecenia, które dla nich określę.

%1 akceptuje dane wejściowe określone podczas wpisywania pliku wsadowego, teraz chciałbym, aby plik wsadowy odczytał linie w txt i zrobił to.

Wiersze w tekście są w formie listy bez użycia przecinków lub czegokolwiek.

Odpowiedz

9

Jednym ze sposobów, aby to zrobić byłoby umieścić adresy URL w pliku tekstowym tak:

www.google.com
www.yahoo.com

Następnie uruchom następujące partię

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

i uruchomić go z cmd jako pingme.bat URLs.txt

Alternatywnie, można podać nazwę pliku tekstowego w obrębie partii, i uruchomić go bez parametru

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

Oto kolejny podejście

Ta konkretna partia będzie ciągnąć z listy, a następnie napisz do Output.txt jeśli ping powiodło

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

Mam nadzieję, że to ustawia cię we właściwym kierunku.

+2

Dlaczego SETLOCAL/ENDLOCAL wewnątrz 1. pętli ?. Po co wywoływać podprogram w 2. pętli? W obu przypadkach spowalniasz rzeczy bez żadnego powodu, który widzę. – dbenham

+0

@dbenham Dobra uwaga. Zostało to tam od czasu modyfikacji skryptu dla postu SO. Podprogram jest po prostu dla organizacji. Dziękuję Ci. –

1

Można użyć FOR pętlę - zachowaj to jako pingme.bat:

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

i wywołać ją z pliku tekstowego jako parametr pingme.bat computers.txt.

0

Aby znaleźć adresy IP wielokrotnego URL w pliku tekstowym i uzyskać wyjście w pliku tekstowego:

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

Zapisz skrypt jako „ping.bat” i nazywają ping.bat URL.txt z wiersza poleceń.

Powiązane problemy