Hi,
Just wanted to share some work done to simplify the everyday life of my teammates.
One week ago, one of my colleague had a lot of file path to share through our CRM system and in fact he found that was very boring because he had to copy all network path and apply a transformation on every string. To transform network file or folder path from their UNC or Drive path (mounted drive) representation to a file/folder URL style that can be use to access local system storage through a browser.
To do that he had to 'manually' switch all '\' (windows path separator) to '/' and concatenate 'file://'. I understood it could become a pain to do that kind of boring task, so I developed a simple script/executable to do that for one or multiple selected file or folder with only 1 click from Windows Explorer.
My Teammates and I already used
StExBar to improve our Windows Explorer experience. It's a highly customizable tools in which you can add your own custom command, with button and/or hot-key.
As the function we need has only to run under windows, I choose a windows only tool called
AutoHotKey to build a script performing multiple path selection, conversion to URL style and injection into the clipboard.
AutoHotKey provide every things I needed to develop the script:
- File parsing
- StExBar selection (single or multiple) are store in a temp text file that can be pass to any cmd or application through "%selafile"
- Clipboard
- From AHK (AutoHotKey) point of view the winows clipboard is just a variable.
- String parsing, Regex Matching etc...
- To detect Drive letter
- To detect UNC Path
- To replace '\' and concatenate the 'file://' prefix.
link := "file:///"
pathrep := ""
CR := Chr(13)
LF := Chr(10)
GetUNCPath(letter)
{
localName = %letter%
length := 1000
VarSetCapacity(remoteName, length)
result := DllCall("Mpr\WNetGetConnection"
, "Str", localName
, "Str", remoteName
, "UInt *", length)
if (ErrorLevel <> 0 || result != 0)
{
return ""
}
else
{
; MsgBox, %remoteName% (%length%) -- result: %result%
return remotename ; end function
}
}
Loop Read, %1%
{
p := A_LoopReadLine
;MsgBox %p%
if ( RegExMatch( p , "[A-Za-z][:]") ) ; match a regex for drive letter "^:"
{
unc := GetUNCPath( SubStr( p, 1, 2) )
if ( unc <> "" )
{
withoutDriveLetter := SubStr( p, 3, strLen(p)-2 )
pathrep = %link%%unc%%withoutDriveLetter%%CR%%LF%%pathrep%
}
}
else ; should already be an unc (check to be sure)
{
if ( RegExMatch( p , "\\\\") )
{
pathrep = %link%%p%%CR%%LF%%pathrep%
}
else
{
; Msgbox "ignored " %p%
}
}
}
StringReplace, pathrep, pathrep, \, /, All
; MsgBox %pathrep%
clipboard = %pathrep%
The main advantage of using AHK script is that it can be build and provide as a binary file without any dependency. And the integration of the resulting executable as an StExBar Command is really simple like you can see in the following snapshot:
That script is publicly available on
my GitHub repo