Solved

Quick question about parsing a string in a batch file

Posted on 2008-06-09
10
2,327 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 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
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.

 
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: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

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

Introduction: Recently, I got a requirement to zip all files individually with batch file script in Windows OS. I don't know much about scripting, but I searched Google and found a lot of examples and websites to complete my task. Finally, I was ab…
Displaying an arrayList in a listView using the default adapter is rarely the best solution. To get full control of your display data, and to be able to refresh it after editing, requires the use of a custom adapter.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
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…

792 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