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