Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1313
  • Last Modified:

Batch File: String manipulation

Hi there,

I need to replace a the word "SAISON" from a text file to the word "PERIOD+".

SCRIPT TO FIX:

@echo off
setlocal enabledelayedexpansion

FOR "delims=" %%A in (%File_LOG_Mirror%) do (
      ECHO !%%A:SAISON=PERIOD^+!>>%File_LOG_Mirror_TEMP%
      DEL %File_LOG_Mirror%
      REN %File_LOG_Mirror_TEMP% %File_LOG_Mirror%
)

exit


Thanks,
Rene
0
ReneGe
Asked:
ReneGe
  • 6
  • 5
  • 4
  • +2
4 Solutions
 
Bryan ButlerCommented:
Can you use WSH or powershell?  Or any other language?
0
 
Meir RivkinFull stack Software EngineerCommented:
u mean the file name should be manipulated or the file content?
0
 
ReneGeAuthor Commented:
Content. Thanks
0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
ReneGeAuthor Commented:
==> NO. just batch file.

Thanks
0
 
ReneGeAuthor Commented:
==> developedtester

NO. just batch file.

Thanks
0
 
Meir RivkinFull stack Software EngineerCommented:
here's a vb script which does that.replace TEXT_FILE with the file path you wish to manipulate.
const TEXT_FILE = "c:\temp\1.txt"
const FIND_STRING = "SAISON"
const REPLACE_STRING = "PERIOD+"

set objFSO = createobject("scripting.filesystemobject")
set objFile = objFSO.OpenTextFile(TEXT_FILE, 1)
fileContent = objFile.ReadAll
objFile.Close

set objFile = objFSO.OpenTextFile(TEXT_FILE, 2)
objFile.Write Replace(fileContent, FIND_STRING, REPLACE_STRING)
objFile.Close

Open in new window

0
 
Meir RivkinFull stack Software EngineerCommented:
for batch file solution check http://www.dostips.com/?t=Batch.FindAndReplace
0
 
Bill PrewCommented:
Looks like you are getting some good help on a scripting approach.  But an alternative is to use a small general purpose search and replace type utility, like the one mentioned in this therad.  There are a few of these around.

http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/MS_DOS/Q_23185721.html

~bp
0
 
Bill PrewCommented:
If you know there are no funny characters, or blank lines in the file, then this may get the job done:

@echo off
setlocal enabledelayedexpansion

FOR "delims=" %%A in (%File_LOG_Mirror%) do (
      set Line=%%A
      ECHO !Line:SAISON=PERIOD^+!>>"%File_LOG_Mirror%._temp"
      DEL "%File_LOG_Mirror%"
      REN "%File_LOG_Mirror%._temp" "%File_LOG_Mirror%"
)

exit

~bp
0
 
t0t0Commented:
it's all very higgledy-piggledy...

firstly, as imaginative as it is, you can't do !%%a:abc=xyz!. I note we'd still have to rely on delayed expansion if it were possible. For that reason, %%a needs to be assigned to a variable first. Like this:

   set var=%%a
   echo !var:abc=xyz!

prew, if that works I'll take my hat off to you. Obviously, blank lines are not preserved.

As for the renaming thing... how about something like this:

BTW, AFAIK, you can't use DELIMS without 'FOR /F'.

Furthermore, because there are no double-quotes around %File_LOG_Mirror% in the FOR statement, I can only assume it contains no spaces. That being the case, the DEL and REN commands don't require them either.

However, to bo on the safe side, I would prefer to use USEBACKQ and  double-quotes (See next comment).



@echo off
setlocal enabledelayedexpansion

for /f "delims=" %%a in (%File_LOG_Mirror%) do (
      set line=%%a
      echo !line:SAISON=PERIOD^+!>>%File_LOG_Mirror%.tmp
)

move /y %File_LOG_Mirror%.tmp %File_LOG_Mirror%
0
 
t0t0Commented:
Uses USEBACKQ


@echo off
setlocal enabledelayedexpansion

for /f "usebackq delims=" %%a in ("%File_LOG_Mirror%") do (
      set line=%%a
      echo !line:SAISON=PERIOD^+!>>"%File_LOG_Mirror%.tmp"
)

move /y "%File_LOG_Mirror%.tmp" "%File_LOG_Mirror%"
0
 
Bill PrewCommented:
Ah yes, that pesky bracket was in the wrong place!  Just to be clear it should look like this.

@echo off
setlocal enabledelayedexpansion

set File_LOG_Mirror=EE26415780.txt

FOR /F "usebackq delims=" %%A in ("%File_LOG_Mirror%") do (
    set Line=%%A
    ECHO !Line:SAISON=PERIOD^+!>>"%File_LOG_Mirror%._temp"
)
DEL "%File_LOG_Mirror%"
REN "%File_LOG_Mirror%._temp" "%File_LOG_Mirror%"

exit /b

~bp
0
 
t0t0Commented:
Come clean with me bill.... you were inspired by my previous comment! I like that. Ha ha ha...
0
 
t0t0Commented:
Just pulling your leg prew...
0
 
Bill PrewCommented:
It's all good.

~bp
0
 
t0t0Commented:
:)
0
 
ReneGeAuthor Commented:
*** TO ALL OF YOU GUYS ***
*I first wish to tell you that I am more than impressed.
*Not only you were extremly proactive, but you worked together with a touch of magic.
********************************

The following last script from billprew (that was inspired by the previous comment of the leg puller t0t0...;-)worked without a glitch.

Thanks to you all. You are my heros!!

I just wished I could give more than 500 pts...

Cheers,
Rene
0
 
t0t0Commented:
Pleasing feedback.

Pity I missed the definition of %File_LOG_Mirror% - I genuinely thought this was defined elsewhere.

Not to worry though. We got there in the end. It's great to be credited. Thank you.

The challenge far outweighs the points.
0
 
Bill PrewCommented:
Thanks Rene.

~bp
0
 
Bryan ButlerCommented:
Very kind Rene.  I wish you could give more points too!  lol  Glad we could help, or should I say they ;
Cheers,
dt
0
 
Meir RivkinFull stack Software EngineerCommented:
10x man
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

  • 6
  • 5
  • 4
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now