Batch file edit text file

Discussion forum for all Windows batch related topics.

Moderator: DosItHelp

Post Reply
Message
Author
Beach Boy
Posts: 9
Joined: 27 Jul 2013 10:40

Batch file edit text file

#1 Post by Beach Boy » 28 Jul 2013 11:52

Is it possible for a batch file to: search a given text file for a given word/string and change that word/string then save it with the changes? I have search online but not finding this specific script that will help. The file I am looking to work with is a .reg file if that helps. Thank you.

penpen
Expert
Posts: 1864
Joined: 23 Jun 2013 06:15
Location: Germany

Re: Batch file edit text file

#2 Post by penpen » 28 Jul 2013 12:25

In many cases something like this suffices:

Code: Select all

@echo off
set "replace=something"
set "replaced=different"

set "source=Source.txt"
set "target=Target.txt"

setlocal enableDelayedExpansion
(
   for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %source%') do (
      set "line=%%b"
      if defined line set "line=!line:%replace%=%replaced%!"
      echo(!line!
   )
) > %target%
endlocal

penpen

Edit: Corrected error: missing '' in loop
Edit2: Removed 2 bugs on undefined line.
Last edited by penpen on 28 Jul 2013 16:52, edited 2 times in total.

Beach Boy
Posts: 9
Joined: 27 Jul 2013 10:40

Re: Batch file edit text file

#3 Post by Beach Boy » 28 Jul 2013 14:27

penpen,
I tried this - it seems to just create a blank file with the given "target" name. No changes in the origial file as reqested even given the settings for replaced and replace that don't seem to change.

penpen
Expert
Posts: 1864
Joined: 23 Jun 2013 06:15
Location: Germany

Re: Batch file edit text file

#4 Post by penpen » 28 Jul 2013 15:45

Sorry i didn't test it.
I've corrected the code above, and it should work now.

penpen

Beach Boy
Posts: 9
Joined: 27 Jul 2013 10:40

Re: Batch file edit text file

#5 Post by Beach Boy » 28 Jul 2013 16:02

My output file still seems to be blank. I change the values for the 4 "set" lines to match my environment - am I missings something?

foxidrive
Expert
Posts: 6033
Joined: 10 Feb 2012 02:20

Re: Batch file edit text file

#6 Post by foxidrive » 28 Jul 2013 16:40

Try it with the values in the bat file. It works, but blank lines give it a hernia. :)

penpen
Expert
Posts: 1864
Joined: 23 Jun 2013 06:15
Location: Germany

Re: Batch file edit text file

#7 Post by penpen » 28 Jul 2013 16:56

Removed the bugs with empty lines.
It now should work with blank lines, too.

Note you cannot use the = character in replace variable, all other should work.

Code: Select all

:: Source.txt example
This is something from all.
This is something from all.
This is something from all.
Nothing follows.


This is something from all.
This is something from all.
This is something from all.
This is something from all.
End.

penpen

Beach Boy
Posts: 9
Joined: 27 Jul 2013 10:40

Re: Batch file edit text file

#8 Post by Beach Boy » 29 Jul 2013 11:47

Here is my demima: from your PC, go to regedit and export the following hive as "control.reg" -
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase]

Then with the following code tell me if you can change the the word "SYSTEM" to "offline" (on each line) in the source file with the following code, or what output do you see in the target file:

@echo off
set "replace=system"
set "replaced=offline"

set "source=control.reg"
set "target=control2.reg"

setlocal enableDelayedExpansion
(
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %source%') do (
set "line=%%b"
if defined line set "line=!line:%replace%=%replaced%!"
echo(!line!
)
) > %target%
endlocal

penpen
Expert
Posts: 1864
Joined: 23 Jun 2013 06:15
Location: Germany

Re: Batch file edit text file

#9 Post by penpen » 29 Jul 2013 12:14

Yes, it is working fine.
The only thing, that might happen is, that the reg file on some systems may be exported using Unicode.
To avoid this, as Unicode is not supported, you should transform it to ANSI/ASCII:

Code: Select all

::Export the key
reg.exe export "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase" temp.reg

:: transform to ascii
cmd /a /c type temp.reg > control.reg

:: delete temp file
del temp.reg
As on my pc the export is done in ANSI i easily forget the Unicode problem, sry for that.

penpen
Last edited by penpen on 29 Jul 2013 12:25, edited 1 time in total.

Beach Boy
Posts: 9
Joined: 27 Jul 2013 10:40

Re: Batch file edit text file

#10 Post by Beach Boy » 29 Jul 2013 12:25

That worked greatly. Thank you for the assistance.

werejago
Posts: 21
Joined: 01 Oct 2020 07:43

Re: Batch file edit text file

#11 Post by werejago » 01 Oct 2020 09:20

Is it possible to convert this into having the user input the replaced word and over write the file?

This script seems to just find and replace a given string but how can I use a given string by user input.

My goal here is to have a user open a batch file which asks them to enter a number and have that number replace another number in a text file.

aGerman
Expert
Posts: 3973
Joined: 22 Jan 2010 18:01
Location: Germany

Re: Batch file edit text file

#12 Post by aGerman » 02 Oct 2020 02:05

@werejago
Has this been answered? viewtopic.php?f=3&t=9795&p=63004#p62995

Steffen

penpen
Expert
Posts: 1864
Joined: 23 Jun 2013 06:15
Location: Germany

Re: Batch file edit text file

#13 Post by penpen » 05 Oct 2020 05:11

werejago wrote:
01 Oct 2020 09:20
Is it possible to convert this into having the user input the replaced word and over write the file?
Yes, you could use the "set /p" command to store user input into an environment variable.
You can't overwrite the file while reading it (should locked), but you can write to a temporary file and then replace the original file with a copy of the temporary one by using the commands "delete" and "copy".


penpen

Post Reply