Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how do i get a batch file to accept input from a txt file?

Tags:

batch-file

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.

like image 828
Dre_Dre Avatar asked May 18 '12 13:05

Dre_Dre


People also ask

Can a batch file ask for input?

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%!

How do you create a batch file from a text file?

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.

What does %% do in batch file?

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.


2 Answers

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.

like image 197
Michael Capobianco Avatar answered Sep 28 '22 04:09

Michael Capobianco


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.

like image 21
marapet Avatar answered Sep 28 '22 05:09

marapet