[Webinar] Streamline your web hosting managementRegister Today

x
?
Solved

Quick question about parsing a string in a batch file

Posted on 2008-06-09
10
Medium Priority
?
2,344 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
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
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: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

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

When you see single cell contains number and text, and you have to get any date out of it seems like cracking our heads.
What do responsible coders do? They don't take detrimental shortcuts. They do take reasonable security precautions, create important automation, implement sufficient logging, fix things they break, and care about users.
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…
Progress

612 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