I would like to run commands in a batch file on multiple computers.
For example:
@echo off
ping %1
pause
exit
If this batch file were called pingme.bat, and I type pingme.bat yahoo.com
, then it would ping yahoo.com. My problem is I want the batch file to accept input from a text file.
For example, pingme.bat computers.txt
would read the names of computers listed in the computers.txt file, and do whatever command I specified to be done to them.
%1
accepts the input I specify when I type the batch file. Now I would like the batch file to read the lines from that input text file and use them as arguments to the command.
The lines in the text are in list form, not using commas or anything.
To have a batch file stop and prompt for input, you would want to look into using set /p , which will prompt for input and then assign that input to a variable. e.g.: set /P name="What Is Your Name? " echo Hello %name%!
To create a Windows batch file, follow these steps: Open a text file, such as a Notepad or WordPad document. Add your commands, starting with @echo [off], followed by, each in a new line, title [title of your batch script], echo [first line], and pause. Save your file with the file extension BAT, for example, test.
Use double percent signs ( %% ) to carry out the for command within a batch file. Variables are case sensitive, and they must be represented with an alphabetical value such as %a, %b, or %c. Required. Specifies one or more files, directories, or text strings, or a range of values on which to run the command.
One way to do so would be to place the URLS in a text file like so:
www.google.com
www.yahoo.com
Then run the following batch
for /f %%a in (%1) do (
echo Pinging %%a...
ping %%a
)
and run it from cmd as pingme.bat URLs.txt
Alternatively, you may specify the text file's name within the batch, and run it without the parameter
for /f %%a in (URLs.txt) do (
echo Pinging %%a...
ping %%a
)
Here's another approach
This particular batch will pull from the list, and write to output.txt if the ping was successful
@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%"
Hopefully that sets you in the right direction.
You may use a FOR
loop - save this as pingme.bat:
FOR /F "tokens=*" %%L IN (%1) DO (
ping %%L
pause
)
and call it with the text file as parameter pingme.bat computers.txt
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With