Hashim Aziz
Hashim Aziz

Reputation: 6052

Batch File To Read And Modify Text File

Okay, so basically, I have a whole list of links in a plain text Notepad file, each link on a seperate line. All I am wanting to do is to add a bit of text before each link, specifically: 127.0.0.1 and a couple of spaces.

So this...

somelink.com 

becomes this...

127.0.0.1     somelink.com 

By now you've probably already guessed that I am trying to edit the contents of a text file to make it useable as a HOSTS file in Windows.

So I am wanting some batch file code, executable in a .bat file, which basically reads a Notepad text file, and then add "127.0.0.1 " at the beginning of each line with text on it. I am guessing this is probably a very simple piece of code for someone with some knowledge of MS DOS and batch file code, but that most certainly isn't me, and the only batch files I have ever written have been with help like now.

Thanks for any and all help in advance with this, it really is much appreciated.

Upvotes: 1

Views: 38301

Answers (3)

Batman
Batman

Reputation: 31

here we go!

(
Set /p line1=
Set /p line2=
Set /p line3=
Set /p line4=
)<Filename.txt
echo 127.0.0.1    %line1%>Filename.txt
echo 127.0.0.1    %line2%>>Filename.txt
echo 127.0.0.1    %line3%>>Filename.txt
echo 127.0.0.1    %line4%>>Filename.txt

This will Read the first four lines of the text file, and then put in your stuff and each line back into the line it came from. Have Fun!

Upvotes: 3

PA.
PA.

Reputation: 29339

read HELP FOR and then try this in a command prompt

  FOR /F "delims=" %a in (input.txt) do @echo 127.0.0.1   %a >>output.txt

here is some explanation and some considerations to extend it with a little more complete functionality and put it in a BAT file

  1. FOR is the command to iterate over the lines of your input text file. Read microsoft documentation at http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/for.mspx

  2. input.txt is the text file that contains your list of domain names, it must reside in the current directory

  3. output.txt will be the result file that will contain the list of domain names prefixed with 127.0.0.1, it will be created in the current directory

  4. If you want to create a BAT file, you need to move the FOR command and edit it a little bit, changing the %a loop variable names to be %%a.

  5. You can then place the BAT file either in the current directory, where your input resided and where the output will be created.

  6. Alternativelly, you may place your BAT file, elsewhere. In that case, you need to invoke it with its full path.

  7. Or you may even place it in a special directory (I have my own C:\Program Files\CMD) and add it in the PATH system variable. See here www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/path.mspx?mfr=true how you can change your PATH for your current session. And here ss64.com/nt/path.html you may find some explanation on how to make the PATH change permanent.

  8. Also, you might be tempted to add some flexibility to your BAT file, instead of having constant input.txt and output.txt filename, replace them with %1 and %2 which represent the first and second command line parameters of your BAT file.

  9. the user might then want to use files which contain blanks in their filenames. They might specify them surrounding the names with quotes ". In that case, you need to add some incantation usebackq in the FOR command for it to not break havoc when the user uses quotes.

  10. Finally, you will need to decide what to do in case the output text file already exists, you migh want to consider prevent overwriting.

So putting all this pieces together, here is a short BAT file to get you started...

    @echo off
    if .%2==. goto help
    if not exist %1 goto helpno1
    if exist %2 goto helpalready2
    FOR /F "usebackq delims=" %%a in (%1) do @echo 127.0.0.1   %%a >>%2
    goto :eof
    :help
    echo you need to specify input and output text files
    goto :eof
    :helpno1
    echo %1 not found
    goto :eof
    :helpalready2
    echo %2 already exist
    goto :eof

welcome to BAT programming and enjoy!

Upvotes: 5

Anthony Miller
Anthony Miller

Reputation: 15899

In addition to PA.'s answer, if you require a specific number of spaces, you can throw them into a variable and add it to the command as well.

  SET spaces=          # to the left is 10 spaces
  FOR /F "delims=" %a in (input.txt) do @echo 127.0.0.1%spaces%%a>>output.txt

So the output will be

127.0.0.1          somelink.com

Batch-File flavor:

  SET spaces=          # to the left is 10 spaces
  FOR /F "delims=" %%a in (input.txt) do @echo 127.0.0.1%spaces%%%a>>output.txt

Upvotes: 0

Related Questions