Solved

Find and Replace .cmd file

Posted on 2011-09-08
12
465 Views
Last Modified: 2012-05-12
Hello,

I would like to find and replace text within an XML file. I can simply do this with notepad's built in find and replace feature, but I have several finds to do on a daily basis.

I need to find a tag <g:id> and replace it with
<g:id xmlns:g="http://base.google.com/ns/1.0">
and the same for <g:brand>
<g:brand xmlns:g="http://base.google.com/ns/1.0">

I have a folder called myFolder and inside I would like to have the .xml file along with the .cmd so that when I double click the .cmd it searches the .xml file and replaces the tags.

Thanks, shout if you need any more information.
0
Comment
Question by:vacpartswarehouse
[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
  • 6
  • 6
12 Comments
 
LVL 56

Expert Comment

by:Bill Prew
ID: 36506423
Doing this in a CMD file isn't going to be the best approach, since it's ability to search and replace is pretty limited.

I'd suggest either doing it with a VBS script, where it could handle this well, or use a free utility like chgstr to do it.

http://www.paulslore.com/index.php?option=com_content&task=view&id=49&Itemid=46

~bp
0
 
LVL 56

Expert Comment

by:Bill Prew
ID: 36506448
If a VBS approach interests you let me know and I'll post an example, but don't want to do that if it has to be BAT/CMD.

~bp
0
 

Author Comment

by:vacpartswarehouse
ID: 36506481
I have downloaded the CHGSTR and unzipped it to my downloads folder, but when I run the .exe the command prompt window flashes and nothing else happens. What do I need to do to utilize this program?
0
Free learning courses: Active Directory Deep Dive

Get a firm grasp on your IT environment when you learn Active Directory best practices with Veeam! Watch all, or choose any amount, of this three-part webinar series to improve your skills. From the basics to virtualization and backup, we got you covered.

 
LVL 56

Expert Comment

by:Bill Prew
ID: 36506507
It's a command line utility, so you will need to create a BAT or CMD script that runs that utility, supplying the desired command line parms to it.  Here's an example in another question this is fairly similar to what you are trying to do.  Let me know if that doesn't help, I'll provide more info here.

http://www.experts-exchange.com/Programming/Languages/Scripting/Shell/Batch/Q_26824267.html

~bp
0
 

Author Comment

by:vacpartswarehouse
ID: 36506625
Maybe a VB macro would be best. In this situation the column headers are the <tags> and look like g:id and g:brand. Thanks
0
 

Author Comment

by:vacpartswarehouse
ID: 36506691
Here are all the XML tags that need changing...

<ns1:description>
<ns1:id>
<ns1:brand>
<ns1:expiration_date>
<ns1:price>
<ns1:upc>
<ns1:weight>      
<ns1:mpn>
<ns1:product_type>
<ns1:condition>

.. to:

<g:description xmlns:g="http://base.google.com/ns/1.0">
<g:id xmlns:g="http://base.google.com/ns/1.0">
<g:brand xmlns:g="http://base.google.com/ns/1.0">
<g:expiration_date xmlns:g="http://base.google.com/ns/1.0">
<g:price xmlns:g="http://base.google.com/ns/1.0">
<g:upc xmlns:g="http://base.google.com/ns/1.0">
<g:weight xmlns:g="http://base.google.com/ns/1.0">
<g:mpn xmlns:g="http://base.google.com/ns/1.0">
<g:product_type xmlns:g="http://base.google.com/ns/1.0">
<g:condition xmlns:g="http://base.google.com/ns/1.0">
0
 
LVL 56

Accepted Solution

by:
Bill Prew earned 500 total points
ID: 36507015
Okay, give this a try.  Save as a VBS and edit the correct location of the XML file in the sInfile variable. If you want to overwrite that file you can, or if you want the output to a new file put a different name in the sOutfile variable;

Option Explicit

' Define needed constants
Const ForReading = 1
Const ForWriting = 2
Const TriStateUseDefault = -2

' Define variable
Dim sInFile, sOutFile, oFSO, oInFile, sData, oOutFile

' Set input file name, and output filename (if same file will be overwritten)
sInfile = "EE27298706.xml"
sOutfile = sInFile

' Create file system object
Set oFSO = CreateObject("Scripting.FileSystemObject")

' Read entire input file into a variable and close it
Set oInfile = oFSO.OpenTextFile(sInfile, ForReading, False, TriStateUseDefault)
sData = oInfile.ReadAll
oInfile.Close
Set oInfile = Nothing

sData = Replace(sData, "<ns1:description>",     "<g:description xmlns:g=""http://base.google.com/ns/1.0"">")
sData = Replace(sData, "<ns1:id>",              "<g:id xmlns:g=""http://base.google.com/ns/1.0"">")
sData = Replace(sData, "<ns1:brand>",           "<g:brand xmlns:g=""http://base.google.com/ns/1.0"">")
sData = Replace(sData, "<ns1:expiration_date>", "<g:expiration_date xmlns:g=""http://base.google.com/ns/1.0"">")
sData = Replace(sData, "<ns1:price>",           "<g:price xmlns:g=""http://base.google.com/ns/1.0"">")
sData = Replace(sData, "<ns1:upc>",             "<g:upc xmlns:g=""http://base.google.com/ns/1.0"">")
sData = Replace(sData, "<ns1:weight>",          "<g:weight xmlns:g=""http://base.google.com/ns/1.0"">")
sData = Replace(sData, "<ns1:mpn>",             "<g:mpn xmlns:g=""http://base.google.com/ns/1.0"">")
sData = Replace(sData, "<ns1:product_type>",    "<g:product_type xmlns:g=""http://base.google.com/ns/1.0"">")
sData = Replace(sData, "<ns1:condition>",       "<g:condition xmlns:g=""http://base.google.com/ns/1.0"">")

' Write file with any changes made
Set oOutfile = oFSO.OpenTextFile(sOutfile, ForWriting, True)
oOutfile.Write(sData)
oOutfile.Close
Set oOutfile = Nothing

' Cleanup and end
Set oFSO = Nothing

Open in new window

~bp
0
 

Author Comment

by:vacpartswarehouse
ID: 36510497
Looks like that will do the trick.

Will the macro find file named EE27298706 anywhere on my computer? In this situation the file was on my desktop and it successfully made the changes.

I see how the macro does the find and replace so I'll add in the part to take care of the closing tags.

Thanks for all your help!
0
 
LVL 56

Expert Comment

by:Bill Prew
ID: 36510528
No, if you only specify the filename and extension as I did, the file would have to exist in the current directory when the script is run.  If you want to be more specific then specify the full path to the file in that variable, like:

sInfile = "C:\Dir1\Dir2\EE27298706.xml"

~bp
0
 

Author Comment

by:vacpartswarehouse
ID: 36510570
Ah, thanks for clearing that up!
0
 

Author Closing Comment

by:vacpartswarehouse
ID: 36510582
Thank you for your time and patience!
0
 
LVL 56

Expert Comment

by:Bill Prew
ID: 36510968
No problem, glad you got something useful, thanks for the comments.

~bp
0

Featured Post

Want Experts Exchange at your fingertips?

With Experts Exchange’s latest app release, you can now experience our most recent features, updates, and the same community interface while on-the-go. Download our latest app release at the Android or Apple stores today!

Question has a verified solution.

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

In this post we will learn different types of Android Layout and some basics of an Android App.
The SignAloud Glove is capable of translating American Sign Language signs into text and audio.
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…
Simple Linear Regression

624 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