Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating multiple Windows URL shortcuts from a bookmarks HTML file

I have a very large number of bookmarks in Google Chrome. I want to transfer all of them to a windows folder, so that each bookmark will be a shortcut to a website (I want a list of shortcuts, just like any list of regular applications shortcuts). I also would like to preserve the bookmark's name and icon.

I searched for a way to achieve my goal, but all I could find is to either manually Create application shortcuts in Chrome, or to manually drag & drop links from the HTML file exported from the bookmarks in the Chrome Bookmark manager to a folder.

Since there's no easy solution (AFAIK), I thought about achieving it in another way.

Basically, what I have, is an HTML file called bookmarks.html (created by the Export bookmarks to HTML file feature in the Organize menu inside the Bookmark Manager. It's a long list of links (<a>s) - I have more than 250 bookmarks.

I can extract the data I need from the file easily, probably with an XML Parser, though it's possible even with regex, because the structure is known and is the same throughout the whole file:

...
<DT><A HREF="http://data.stackexchange.com/" ADD_DATE="1342120101" ICON="data:image/png;base64,iVBORw0......">Stack Exchange</A>
<DT><A HREF="http://www.istockphoto.com/" ADD_DATE="1285715116" ICON="data:image/png;base64,iVBORw0.......">Web Design</A>
<DT><A HREF="http://icons.mysitemyway.com/" ADD_DATE="1287435657" ICON="data:image/png;base64,iVBORw0........">Ico.etc</A>
<DT><A HREF="http://www.shutterstock.com/" ADD_DATE="1285715294" ICON="data:image/png;base64,iVBORw0.....">Shutterstock</A>
...

The problem is that I don't know how to create a script that would take the data - i.e URL, icon (in base64), and name - and make Windows URL shortcuts using that data. I know of few VB scripts that can create a custom shortcut, but not multiple (well, about 300) shortcuts at once.

like image 745
amiregelz Avatar asked Aug 20 '12 19:08

amiregelz


1 Answers

Hmm, in combination with a tool like everything that would be usefull, only you will need to do the operation regularly. I suppose it must be possible to get your source right from chrome, anyway here is a script that does what you ask for.

Const ForReading = 1, ForWriting = 2, ForAppending = 8, CreateIfNeeded = true
outpath = "g:\script\shortcut\url2\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
bookmarkfile = "bookmarks.html"
Set bookmarks = objFSO.OpenTextFile(bookmarkfile, ForReading)
Set regEx = New RegExp
regEx.Global = True
Set regEx2 = New RegExp
regEx2.Global = True
regEx2.Pattern = "[^a-zA-Z0-9-_.]"

regEx.Pattern = "<DT><A HREF=""(.*)"" ADD_DATE.*>(.*)</A>"
do until bookmarks.AtEndOfStream
  line = bookmarks.readline()
  if regEx.test(line) then
    shortcut = regEx.Replace(line,"$1")
    filename = trim(regEx.Replace(line,"$2"))
    filename = Regex2.Replace(filename, "_")
    filename = outpath & left(filename, 80) & ".url"
    wscript.echo filename
    'the following skips invalid filenames, you should add a routine to filter out invalid filename characters in your codeset
    on error resume next
    Set objFile = objFSO.OpenTextFile(filename, ForWriting, CreateIfNeeded)
    if err.number <> 0 then
      wscript.echo err.description
    end if
    objFile.write "[InternetShortcut]" & vbcrlf & "URL=" & shortcut
    objFile.close
  end if
loop
like image 106
peter Avatar answered Sep 30 '22 13:09

peter