$vol = "/vol/InfraDev_AppDev03/"
$lun = "VHD.lun"
My first solution (which works but I just think its not so elegant)
is to split the string on "/" and then do a join on "/" with the first
two elements in the result of the split and set that to $vol, and then
leave the third element as $lun.
I am no regex kung fu master, but I was wondering if there was a
slightly more elegant way to solve this problem.
Thanks,
Andy
An alternative is to use the split-path cmdlet:
PS > split-path "/vol/InfraDev_AppDev03/VHD.lun" -leaf
VHD.lun
The problem is that split-path replaces each slash with a backslash in case
of this:
PS > split-path "/vol/InfraDev_AppDev03/VHD.lun" -Parent
\vol\InfraDev_AppDev03
A safer solution is a combination of substring() and lastIndexOf() methods:
PS > $p.substring($p.lastIndexOf("/")+1)
VHD.lun
PS > $p.substring(0,$p.lastIndexOf("/")+1)
/vol/InfraDev_AppDev03
---
Shay Levy
Windows PowerShell MVP
http://blogs.microsoft.co.il/blogs/ScriptFanatic
PowerShell Toolbar: http://tinyurl.com/PSToolbar
A> I have a string that looks like "/vol/InfraDev_AppDev03/VHD.lun" I
A> need to do something so I can get
A>
A> $vol = "/vol/InfraDev_AppDev03/"
A> $lun = "VHD.lun"
A> My first solution (which works but I just think its not so elegant)
A> is to split the string on "/" and then do a join on "/" with the
A> first
A> two elements in the result of the split and set that to $vol, and
A> then
A> leave the third element as $lun.
A> I am no regex kung fu master, but I was wondering if there was a
A> slightly more elegant way to solve this problem.
A>
A> Thanks,
A>
A> Andy
A>
Thanks Shay, much appreciated
Andy
Shay levy has already answered your question.
I paste a more tricky way to solve your problem:
PS C:\> $s = "/vol/InfraDev_AppDev03/VHD.lun"
PS C:\> $vol, $lun = ($s -replace '/([^/]*)$',"/`n`$1").split("`n")
PS C:\> $vol
/vol/InfraDev_AppDev03/
PS C:\> $lun
VHD.lun
The core of my code is ($s -replace '/([^/]*)$',"/`n`$1").split("`n"). The
regular expression inserts an new line character after the last slash. Then
split() splits the string using new line as the separator. Finally, assign
the two parts returned from the split() to the variable vol and lun
separately.
Best wishes,
Tao Ma
"Andy" <an...@get-powershell.com> ????
news:1f1cd9f8-1c44-4666...@25g2000prz.googlegroups.com...
Mmm data parsing!
Perhaps do it the same way
in any Windows process!
So using the _automation_ tool,
powershell.exe:
$path = "/vol/InfraDev_AppDev03/VHD.lun"
$path | LogParser.exe "SELECT
EXTRACT_FILENAME(text) AS Filename,
STRCAT(
EXTRACT_PATH(text), '/') AS Path
FROM STDIN " -i textline -stats off
Returns:
Filename Path
-------- ----------------------
VHD.lun /vol/InfraDev_AppDev03/
Have some data parsing fun,
Log Parser it!