Экспорт закладок Firefox как отдельный .URL при сохранении временных меток

У меня есть большое количество закладок Firefox, которые я хочу удалить и архивировать в виде ярлыков (.URL). Но я также хотел бы сохранить дату, когда они были добавлены в качестве последних измененных дат файлов.

Firefox сохраняет свои закладки с кучей метаданных, таких как дата и последнее изменение в одном файле .json.

Мне нужно сделать следующее:

  1. Экспортируйте закладки из файла .json как отдельные .URLs
  2. Извлеките датуДобавленные метаданные и установите это как последнюю измененную дату .URL-файла

Я не ожидаю, что какая-либо утилита будет иметь эту функцию с самого ее специфического. Но я готов попробовать любую комбинацию инструментов, пока она работает

Создание .URL-файлов при сохранении метки времени из любого браузера bookmarks.html

Этот макрос VBA позволяет конвертировать стандартный файл bookmarks.html (Firefox, Chrome, Opera) в несколько файлов .URL (Internet Explorer)

В качестве бонуса он считывает дату создания из ваших закладок и изменяет новые .URL-файлы, чтобы отразить эту дату в проводнике Windows. Он также сохраняет структуру вашей папки и подпапки. Посмотрите на скриншот

Введите описание изображения здесь

Применение

  • Запустите нужный браузер и экспортируйте закладки как HTML-файл .
    Каждый крупный браузер поддерживает эту способность.
  • Загрузить и открыть соответствующую версию
    • create_URL_files.xls
  • Используйте эту красивую кнопку запуска
  • Excel запрашивает путь к вашему HTML-файлу, который вы создали на первом шаге
  • Все новые ярлыки хранятся в новой папке в том же месте, что и ваш HTML-файл
  • Дата создания файла и дата изменения файла заменяются на соответствующую дату, когда вы впервые создали закладку в своем браузере

Как это работает

  • Макрос VBA открывает ваш HTML-файл как чистый текст в юникоде (сохраняются специальные символы)
  • Он ищет строку за строкой для «HREF =» и извлекает URL-адрес
  • Он делает то же самое для добавленной даты и для используемого заголовка закладки в вашем браузере
  • Он создает все подпапки в соответствии с вашей структурой закладок
  • Он создает новый текстовый файл для каждой закладки и сохраняет следующие данные в этот файл
      [InternetShortcut]
     URL = HTTP: //www.someaddress.com/
    
  • Файл сохраняется как <bookmarktitle>.url
  • Заголовок усекается до 100 символов и все запрещенные символы удаляются
  • Он проверяет, существует ли ярлык, и если да, он добавляет дату создания
  • Данная дата UNIX преобразуется в читаемый формат
  • Файлы и временные метки с измененными файлами изменены на дату, когда вы сохранили закладку в своем браузере

Полезные ссылки

  • Объясняет синтаксис файлов ярлыков Интернета
  • Предъявил мне, как изменять временные метки файлов
  • Онлайн-конвертер для временных меток UNIX
  • Преподавал мне, как бороться с Unicode в именах файлов и названиях
  • Покажите мне трюк, чтобы заставить работать Windows CreateFileW
    (Это метод windows kernel32 для создания файлов с именем файла Unicode)
  • Решение проблемы совместимости между Office 2003 и Office 2013

Если вы просто хотите создавать ярлыки из любого браузера без сохранения временных меток, то это простой способ

  1. Экспортируйте закладки как HTML-файл.
    Internet Explorer, Firefox, Chrome и Opera имеют эту способность в
  2. Введите Win + R и введите %USERPROFILE%\Favorites
  3. Временное резервное копирование всего содержимого где-то
  4. Откройте Internet Explorer → Файл → Импорт и экспорт Введите описание изображения здесь
  5. Выберите свой HTML-файл и импортируйте его
  6. Введите Win + R и введите %USERPROFILE%\Favorites снова.

Теперь у вас есть все закладки как простые .URL-файлы. Вы можете перемещать их туда, где захотите.
Internet Explorer не сохраняет закладки так же, как это делают другие браузеры (в одном файле). Он просто создает файлы .URL для каждой закладки в папке избранных.

Примечание. Не забудьте удалить новые избранные IE и восстановить их с помощью резервной копии

Вот код nixda для 2013 года, который был отредактирован, чтобы исправить пару опечаток и удалить последнюю измененную дату, которая не была найдена в той же строке, что и гиперссылка в экспортированном html-файле из Google Chrome.

Был изменен следующий скрипт нажатия кнопки, чтобы прокомментировать последнюю измененную часть кода.

 Private Sub CommandButton1_Click() Dim shortcutfile As String Dim myadddate As Double forbidden = Array("\", "/", ":", "*", "?", """", "<", ">", "|", "&quot;", "&amp;", "&#39;") Application.ScreenUpdating = False ChDir ThisWorkbook.Path myfullfilename = Application.GetOpenFilename(fileFilter:="HTML Files, *.html") If myfullfilename = False Then Exit Sub mypath = Left$(myfullfilename, InStrRev(myfullfilename, "\")) & "InternetShortCuts" & " " & Format(Now, "yyyy.mm.dd hh-mm-ss") Workbooks.OpenText FileName:=myfullfilename, Origin:=-535, DataType:=xlDelimited, Tab:=False, semicolon:=False, comma:=False, Space:=False On Error Resume Next MkDir mypath On Error GoTo 0 Set mysheet = ActiveWorkbook.Sheets(1) With mysheet For i = 1 To .UsedRange.SpecialCells(xlCellTypeLastCell).Row If InStr(UCase(.Cells(i, 1)), "<DT><H3 ADD_DATE=") <> 0 Then folderend = InStrRev(.Cells(i, 1), "<") folderstart = InStrRev(.Cells(i, 1), ">", folderend) newfolder = Mid(.Cells(i, 1), folderstart + 1, folderend - folderstart - 1) For j = 0 To UBound(forbidden) newfolder = Replace(newfolder, forbidden(j), "") Next j mypath = mypath & "\" & newfolder On Error Resume Next MkDir mypath On Error GoTo 0 End If If InStr(UCase(.Cells(i, 1)), "</DL><P>") <> 0 Then mypath = Left(mypath, InStrRev(mypath, "\") - 1) End If If InStr(UCase(.Cells(i, 1)), "HREF=") <> 0 Then urlstart = InStr(.Cells(i, 1), "HREF=") urlend = InStr(.Cells(i, 1), "ADD_DATE=") myurl = Mid(.Cells(i, 1), urlstart + 6, urlend - urlstart - 8) 'adddateend = InStr(.Cells(i, 1), "LAST_") 'myadddate = Mid(.Cells(i, 1), urlend + 10, adddateend - urlend - 12) 'myadddate = DateAdd("s", myadddate, DateSerial(1970, 1, 1)) titleend = InStrRev(.Cells(i, 1), "<") titlestart = InStrRev(.Cells(i, 1), ">", titleend) mytitle = Mid(.Cells(i, 1), titlestart + 1, titleend - titlestart - 1) mytitle = Left(mytitle, 100) For j = 0 To UBound(forbidden) mytitle = Replace(mytitle, forbidden(j), "") Next j shortcutfile = mypath & "\" & Trim(mytitle) & ".url" With CreateObject("Scripting.FileSystemObject") 'If .FileExists(shortcutfile) Then shortcutfile = mypath & "\" & Trim(mytitle) & " " & Format(myadddate, "yyyy.mm.dd hh-mm-ss") & ".url" If .FileExists(shortcutfile) Then shortcutfile = mypath & "\" & Trim(mytitle) & " " & ".url" With .CreateTextFile(shortcutfile, , True) .write "[InternetShortcut]" & vbNewLine .write "URL=" & myurl .Close End With End With Call Settimestamp(shortcutfile, myadddate) End If Next i Close .Parent.Close False End With Application.ScreenUpdating = True End Sub 

Следующий модуль change_timestamp был изменен для исправления опечатки при объявлении функции CreateFileW, где lpFileName было объявлено как LongLong вместо Long в разделе # VBA7 и продолжением строки при объявлении функции CreateFileW в разделе #Else.

 Option Explicit Private Const OPEN_EXISTING = &H3 Private Const FILE_SHARE_READ = &H1 Private Const FILE_SHARE_WRITE = &H2 Private Const GENERIC_WRITE = &H40000000 Public Type FileTime dwLowDateTime As Long dwHighDateTime As Long End Type Public Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer End Type #If VBA7 Then Private Declare PtrSafe Function LocalFileTimeToFileTime Lib "kernel32" (lpLocalFileTime As FileTime, lpFileTime As FileTime) As Long Private Declare PtrSafe Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FileTime) As Long Private Declare PtrSafe Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare PtrSafe Function CreateFileW Lib "kernel32.dll" _ (ByVal lpFileName As Long, _ ByVal dwDesiredAccess As Long, _ ByVal dwShareMode As Long, _ ByVal lpSecurityAttributes As Long, _ ByVal dwCreationDisposition As Long, _ ByVal dwFlagsAndAttributes As Long, _ ByVal hTemplateFile As Long) As Long Private Declare PtrSafe Function SetFileTimeCreate Lib "kernel32" Alias "SetFileTime" _ (ByVal hFile As Long, _ CreateTime As FileTime, _ ByVal LastAccessTime As Long, _ LastModified As FileTime) As Long #Else Private Declare Function LocalFileTimeToFileTime Lib "kernel32" (lpLocalFileTime As FileTime, lpFileTime As FileTime) As Long Private Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FileTime) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function CreateFileW Lib "kernel32.dll" _ (ByVal lpFileName As Long, _ ByVal dwDesiredAccess As Long, _ ByVal dwShareMode As Long, _ ByVal lpSecurityAttributes As Long, _ ByVal dwCreationDisposition As Long, _ ByVal dwFlagsAndAttributes As Long, _ ByVal hTemplateFile As Long) As Long Private Declare Function SetFileTimeCreate Lib "kernel32" Alias "SetFileTime" _ (ByVal hFile As Long, _ CreateTime As FileTime, _ ByVal LastAccessTime As Long, _ LastModified As FileTime) As Long #End If '======================================================================================================================= '======================================================================================================================= '======================================================================================================================= Function Settimestamp(FileName, FileDateTime) Dim FileHandle As Long Dim Res As Long Dim ErrNum As Long Dim ErrText As String Dim tFileTime As FileTime Dim tLocalTime As FileTime Dim tSystemTime As SYSTEMTIME With tSystemTime .wYear = Year(FileDateTime) .wMonth = Month(FileDateTime) .wDay = Day(FileDateTime) .wDayOfWeek = Weekday(FileDateTime) - 1 .wHour = Hour(FileDateTime) .wMinute = Minute(FileDateTime) .wSecond = Second(FileDateTime) End With Res = SystemTimeToFileTime(lpSystemTime:=tSystemTime, lpFileTime:=tLocalTime) Res = LocalFileTimeToFileTime(lpLocalFileTime:=tLocalTime, lpFileTime:=tFileTime) FileHandle = CreateFileW(lpFileName:=StrPtr(FileName), _ dwDesiredAccess:=GENERIC_WRITE, _ dwShareMode:=FILE_SHARE_READ Or FILE_SHARE_WRITE, _ lpSecurityAttributes:=ByVal 0&, _ dwCreationDisposition:=OPEN_EXISTING, _ dwFlagsAndAttributes:=0, _ hTemplateFile:=0) Res = SetFileTimeCreate( _ hFile:=FileHandle, _ CreateTime:=tFileTime, _ LastAccessTime:=0&, _ LastModified:=tFileTime) CloseHandle FileHandle End Function 
Interesting Posts

Как клонировать BufferedImage

Как изменить стандартную программу типа файла, сохраняя ее текущий значок по умолчанию в Windows 7

Как создать пакет OSGi из библиотеки jar?

Как предотвратить обновление скрытых окон 10?

Изменение размера изображения в asp.net без потери качества изображения

Клавиши клавиатуры в Mac OS X (Unix)

Сделать Excel открытым некоторые гиперссылки с браузером, отличным от по умолчанию

Как выбрать все элементы с определенным ID в jQuery?

Как добавить новую строку в TextView в Android?

Как установить выбранную опцию выпадающего списка с использованием углового JS

Невозможно применить объект типа NHibernate.Collection.Generic.PersistentGenericBag к списку

Получение подматрицы с максимальной суммой?

Как интегрировать заставку для всех типов iPhone в XCode 6.1?

Android – Как разрешить горизонтальную и вертикальную прокрутку

Как получить принтер HP и Canon для работы в Snow Leopard?

Давайте будем гением компьютера.