Solved

How do you insert given text into a line in a text file using a batch script?

Posted on 2010-11-10
8
500 Views
Last Modified: 2012-05-10
Greetings,

I have a batch file that grabs a file off of an ftp server, then deletes a given line based off a search string using type and find.

type in.txt | fine /V "<searchstring>">out.txt

I want to take that out.txt and insert text into one of the lines now, for example:

lineinformation1|moreinfo1|info1|somerandomnumber1
lineinfomation2|||somerandomnumber2
lineinformation3|moreinfo3|info3|somerandomnumber3

and afterwards i want the line to look like:

lineinformation1|moreinfo1|info1|somerandomnumber1
lineinfomation2|insertedinfo|moreinsertedinfo|somerandomnumber2
lineinformation3|moreinfo3|info3|somerandomnumber3

is there any not too complex way to write this?
0
Comment
Question by:jedininja
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
  • +1
8 Comments
 
LVL 26

Expert Comment

by:pony10us
ID: 34106591
Some questions that might make a difference in the code:

1. Is the "lineinformation2" always the same?
2. Do the "|" actually exist as shown?

0
 

Author Comment

by:jedininja
ID: 34106684
@pony10us

yes, the informationline2 is always the same, so is the "insesrtedinfo"

also the | are in as shown. i've been trying this:

for /F "token=*" %%l in (myfilename.txt) do (
   set line=%%l
   set line=!line:"|||"="|insertedinfo|moreinsertedinfo|"!
   echo !line!>> newmyfilename.txt
)

but its not changing the line, also tried it with the full line name in it.
0
 

Author Comment

by:jedininja
ID: 34112979
ended up going with a vb script and running it in my batch.


'replace.vbs
Dim objFSO: Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objFile: Set objFile = objFSO.OpenTextFile("C:\TEMP\oldfilename.txt")

OldData = "|||"
NewData = "|newinfo|moreinfo|"

arrData = Replace(objFile.ReadAll, OldData, NewData)
objFile.Close
Dim objOutput: Set objOutput = objFSO.CreateTextFile("C:\TEMP\newfilename.txt")
objOutput.Write arrData
objOutput.Close

Set objOutput=Nothing
Set objFile=Nothing
Set objFSO=Not

Open in new window

0
MIM Survival Guide for Service Desk Managers

Major incidents can send mastered service desk processes into disorder. Systems and tools produce the data needed to resolve these incidents, but your challenge is getting that information to the right people fast. Check out the Survival Guide and begin bringing order to chaos.

 
LVL 16

Accepted Solution

by:
t0t0 earned 250 total points
ID: 34119146
Try this:

Save the code as PROC.BAT and call it like this:

   PROC in.txt > out.txt

or

   PROC "in.txt" > "out.txt"




@echo off
setlocal enabledelayedexpansion

for /f "tokens=* usebackq" %%a in ("%~1") do (
   set line=%%a
   set line=!line:^|^|^|=^|insertedinfo^|moreinsertedinfo^|!
   echo !line!
)

exit /b
0
 
LVL 54

Expert Comment

by:Bill Prew
ID: 34119874
@t0t0, looks good.  

@pony10us, are you watching :-).

Only thing I would mention is that this assumes that there aren't any "odd" characters in the existing file data, or the new data to be inserted, occasionally certain special characters can be mishandled by BAT, whereas they typically are handled okay in VBS.

~bp
0
 
LVL 26

Expert Comment

by:pony10us
ID: 34124089
@jedininja - I was thinking about VBS

@t0t0 - your code is much cleaner than what I was working on but I was trying to do it without the user having to input anything. Of course I was not able to finish it.

@billprew - of course I am watching.  :)   I almost had something but was trying to use an IF inside a FOR /f and it wouldn't work.  Any ideas?  

Your comments make good sense as usual    :)
0
 
LVL 16

Expert Comment

by:t0t0
ID: 34126838
--> bill

There was no mention of 'odd' characters in the question, other than the pipe symbol of course.

The 'file data' is taken literally from the example given in the question by the asker.

The solution i provide above works with the data provided.

I would be quite happy to amend the code, if possible, to handle other requirements where special characters are concerned however, this may not be an issue we need to concerned ourselves with.

VBS does provide advantages over DOS and maybe, keeping in flavour with DOS, the VBS script could be generated from within the same batch file thereby not requiring a 'seperate' external file.


--> pony10us

Your comments are noted.
0
 

Author Closing Comment

by:jedininja
ID: 34136117
t0t0 strikes again :)
0

Featured Post

How our DevOps Teams Maximize Uptime

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us. Read the use case whitepaper.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Being a system administrator some time we require to do things remotely, one of them is installing software. Here I am going to tell you how to install software through wmic (Windows management instrument console). I am not at all saying that this i…
This article was inspired by a question here at Experts Exchange (http://www.experts-exchange.com/Software/Photos_Graphics/Images_and_Photos/Q_28629170.html). The requirements stated in that question are (1) reduce the file size of a large number of…
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…
How to Install VMware Tools in Red Hat Enterprise Linux 6.4 (RHEL 6.4) Step-by-Step Tutorial

710 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question