Solved

Find and Replace .cmd file

Posted on 2011-09-08
12
429 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
  • 6
  • 6
12 Comments
 
LVL 51

Expert Comment

by:Bill Prew
Comment Utility
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 51

Expert Comment

by:Bill Prew
Comment Utility
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
Comment Utility
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
 
LVL 51

Expert Comment

by:Bill Prew
Comment Utility
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
Comment Utility
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
Comment Utility
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
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
LVL 51

Accepted Solution

by:
Bill Prew earned 500 total points
Comment Utility
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
Comment Utility
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 51

Expert Comment

by:Bill Prew
Comment Utility
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
Comment Utility
Ah, thanks for clearing that up!
0
 

Author Closing Comment

by:vacpartswarehouse
Comment Utility
Thank you for your time and patience!
0
 
LVL 51

Expert Comment

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

~bp
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

A short article about a problem I had getting the GPS LocationListener working.
Whether you've completed a degree in computer sciences or you're a self-taught programmer, writing your first lines of code in the real world is always a challenge. Here are some of the most common pitfalls for new programmers.
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…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

762 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now