jedininja
asked on
How do you insert given text into a line in a text file using a batch script?
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|som erandomnum ber1
lineinfomation2|||somerand omnumber2
lineinformation3|moreinfo3 |info3|som erandomnum ber3
and afterwards i want the line to look like:
lineinformation1|moreinfo1 |info1|som erandomnum ber1
lineinfomation2|insertedin fo|moreins ertedinfo| somerandom number2
lineinformation3|moreinfo3 |info3|som erandomnum ber3
is there any not too complex way to write this?
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
lineinfomation2|||somerand
lineinformation3|moreinfo3
and afterwards i want the line to look like:
lineinformation1|moreinfo1
lineinfomation2|insertedin
lineinformation3|moreinfo3
is there any not too complex way to write this?
ASKER
@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:"|||"="|inserte dinfo|more insertedin fo|"!
echo !line!>> newmyfilename.txt
)
but its not changing the line, also tried it with the full line name in it.
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:"|||"="|inserte
echo !line!>> newmyfilename.txt
)
but its not changing the line, also tried it with the full line name in it.
ASKER
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
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
@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
@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
@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 :)
@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 :)
--> 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.
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.
ASKER
t0t0 strikes again :)
1. Is the "lineinformation2" always the same?
2. Do the "|" actually exist as shown?