Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Quick question about parsing a string in a batch file

Posted on 2008-06-09
10
Medium Priority
?
2,343 Views
Last Modified: 2012-06-27
Too lazy at the moment to look it up myself.  Can someone give me the batch commands to change a Windows path in a string so it can be used with a Unix command?

I need to parse this LocalPath variable....
 SET LocalPath=D:\Folder\Subfolder

So I end up with this assigned to a different variable...
 ECHO %UnixPath%
Result:   /cygdrive/D/Folder/Subfolder

The word "/cygdrive" will remain constant as the first part of the new string, basically I need to get the drive letter and folders, reverse the \ and remove the colon in as few lines as possible.

Thanks!
0
Comment
Question by:VortexAdmin
  • 5
  • 5
10 Comments
 
LVL 67

Accepted Solution

by:
sirbounty earned 400 total points
ID: 21747010
SET LocalPath=D:\Folder\Subfolder
set NewPath=%LocalPath:\=/%
set UnixPath=/cygdrive/%NewPath::=%
0
 
LVL 5

Author Comment

by:VortexAdmin
ID: 21747067
Excellent!  Points are yours.  Would you mind briefly explaining why that works?  ie. putting :\=/% in the middle of the variable?

Thanks!!
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 21747286
it translates to:
replace this "/" with (=) that "\"
Do remove the colon (:), we replace this ":" with 'nothing'... (%NewPath::=%)
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 5

Author Comment

by:VortexAdmin
ID: 21747303
Oops, I've got an extra space in my variable.  I need that variable so I can add another folder (variable) to it. Guess I should have given you exactly what I was doing at the beginning but I was trying to make it as simple as possible.

-- I took what you gave me:
SET LocalPath=D:\Folder\Subfolder
set NewPath=%LocalPath:\=/%
set UnixPath=/cygdrive/%NewPath::=%

-- and changed it to this:
SET LocalPath=D:\Folder\Subfolder
set UnixPath=%LocalPath:\=/%
set UnixPath=/cygdrive/%UnixPath::=%

-- Later in my batch file, I'll need to add another folder variable to the end with a trailing /, we'll call it ClientName. But adding ClientName to the end puts a space in the path.  So this:
 SET UnixPath=%UnixPath%/%ClientName%
produces this:
 /cygdrive/D/Folder/Subfolder /ClientName/

Any way I can get that space out of there?  Thanks!
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 21748071
didn't see that in my example.
There's another way of doing it that escapes me at this late hour, but you can still use

SET UnixPath=%UnixPath~:0,-1%/%ClientName%

Which takes the UnixPath variable, starting at char 0 all the way to 1 less than the length...(which should eliminate the space).
0
 
LVL 5

Author Comment

by:VortexAdmin
ID: 21748219
Hmm,

ECHO %UnixPath% produced:
0,-1/ClientName

Here's what I've got so far:

SET UnixPath=%LocFolder:\=/%
SET UnixPath=/cygdrive/%UnixPath::=%
SET UnixPath=%UnixPath~:0,-1%/%ClientName%
ECHO %UnixPath%

Thanks.
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 21748244
Try this to see where's it's failing...

SET UnixPath=%LocFolder:\=/%
SET UnixPath=/cygdrive/%UnixPath::=%
echo [%UnixPath%]
SET UnixPath=%UnixPath~:0,-1%/%ClientName%
ECHO [%UnixPath%]
0
 
LVL 5

Author Comment

by:VortexAdmin
ID: 21748258
Returned:

[/cygdrive/D/Backups ]
[0,-1ClientName]

Notice that ClientName is the name of the variable, but its actually populated.

ClientName=TestClient
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 21748321
I don't see where the space is introduced...try without reusing the same variable...

SET UnixPath=%LocFolder:\=/%
SET NewUnixPath=/cygdrive/%UnixPath::=%
echo [%NewUnixPath%]
SET FinalUnixPath=%UnixPath~:0,-1%/%ClientName%
ECHO [%FinalUnixPath%]
0
 
LVL 5

Author Comment

by:VortexAdmin
ID: 21748399
OK, I did this:

Set LocFolder=D:\MyFolder
Set ClientName=MyClient

SET UnixPath=%LocFolder:\=/%
SET NewUnixPath=/cygdrive/%UnixPath::=%
echo [%NewUnixPath%]
SET FinalUnixPath=%UnixPath~:0,-1%/%ClientName%
ECHO [%FinalUnixPath%]

And ended up with this:
[/cygdrive/D/MyFolder]
[0,-1ClientName]

I set the LocFolder and ClientName variables immediately before running the rest of it and it got rid of the space.  Before I was pulling them along with 5 others from an outside text file using a command like this:
for /f "tokens=*" %%a in ('find "ClientName=" ^< settings.ini') do set %%a

I checked through all my for /f lines and sure enough at the end of the 3rd one (%%c) was a space.  No other character, nothing I could see, just a physical space in the text line where it couldn't be seen.

Thanks for all your help and sticking with me on it!!!  I've got it from here.
0

Featured Post

Vote for the Most Valuable Expert

It’s time to recognize experts that go above and beyond with helpful solutions and engagement on site. Choose from the top experts in the Hall of Fame or on the right rail of your favorite topic page. Look for the blue “Nominate” button on their profile to vote.

Question has a verified solution.

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

If you’re thinking to yourself “That description sounds a lot like two people doing the work that one could accomplish,” you’re not alone.
Although it can be difficult to imagine, someday your child will have a career of his or her own. He or she will likely start a family, buy a home and start having their own children. So, while being a kid is still extremely important, it’s also …
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…
Progress

824 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