Solved

Quick question about parsing a string in a batch file

Posted on 2008-06-09
10
2,334 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
[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
  • 5
  • 5
10 Comments
 
LVL 67

Accepted Solution

by:
sirbounty earned 100 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
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

A short article about a problem I had getting the GPS LocationListener working.
Computer science students often experience many of the same frustrations when going through their engineering courses. This article presents seven tips I found useful when completing a bachelors and masters degree in computing which I believe may he…
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…

696 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