Solved

Quick question about parsing a string in a batch file

Posted on 2008-06-09
10
2,299 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
Comment Utility
SET LocalPath=D:\Folder\Subfolder
set NewPath=%LocalPath:\=/%
set UnixPath=/cygdrive/%NewPath::=%
0
 
LVL 5

Author Comment

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

Author Comment

by:VortexAdmin
Comment Utility
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
Comment Utility
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
What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 5

Author Comment

by:VortexAdmin
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
java continue statement 10 70
array6 challenfge 6 62
How does Google get such fast response times? 5 120
Device same like our heart 12 42
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
A short article about problems I had with the new location API and permissions in Marshmallow
An introduction to basic programming syntax in Java by creating a simple program. Viewers can follow the tutorial as they create their first class in Java. Definitions and explanations about each element are given to help prepare viewers for future …
In this fifth video of the Xpdf series, we discuss and demonstrate the PDFdetach utility, which is able to list and, more importantly, extract attachments that are embedded in PDF files. It does this via a command line interface, making it suitable …

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

10 Experts available now in Live!

Get 1:1 Help Now