Board logo

标题: [讨论]关于Firefox的收藏夹转成IE的收藏夹的问题 [打印本页]

作者: honghunter     时间: 2008-1-12 11:13    标题: [讨论]关于Firefox的收藏夹转成IE的收藏夹的问题

查了一点资料,现在已经知道如何获取两者的位置。

不过我现在的问题是:Firefox的收藏夹是一个html文件,是否可能不借助第三方工具来提取出其中的URL和网站名称。

(其实我最终希望实现的是两者的同步)


Firefox的收藏夹html文件中记录一个收藏的格式如下:(可能没有ICON和DD注释)

<DT><A HREF="http://www.dps4e.com/" ADD_DATE="1184227241" LAST_VISIT="1199512364" LAST_MODIFIED="1199458911" LAST_CHARSET="GB2312" ICON="data:image/x-icon;base64,AA...这里看起来是ICON的base64编码..." ID="rdf:#$x57xj">dps4e.com</A>
<DD>这里看起来是注释


获取Firefox的收藏夹文件位置:
@echo off
for /f "tokens=2,*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "AppData"') do (
set ffFav=%%j
)
@rem/ echo %ffFav%
@rem/ pause

dir "%ffFav%\*.default" /ad /s | findstr /c:".default" >temp.txt

for /f "tokens=3,*" %%i in (temp.txt) do (
set ffFav1=%%j
)
del /q/s temp.txt >nul

set "ffFav=%ffFav%\Mozilla\Firefox\Profiles\%ffFav1%\bookmarkbackups"
set ffFav1=

if not exist "%ffFav%\." goto :lab_error

@rem/ echo Firefox Fav:[%ffFav%]

for /f "" %%i in ('dir "%ffFav%\bookmarks*" /OD /B') do (
set ffFav1=%%i
)
@rem/ echo Firefox Fav1:[%ffFav1%]

set "ffFav_file=%ffFav%\%ffFav1%"
set ffFav1=

if not exist "%ffFav_file%" goto :lab_error

echo Firefox Fav file:[%ffFav_file%]

goto :eof

:lab_error
echo Error !
goto :eof
获取IE的收藏夹目录位置:(借用本论坛某位大大的代码)
@echo off
for /f "tokens=2,*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Favorites"') do (
set ffFav=%%j
)
echo %ffFav%
pause
[ Last edited by honghunter on 2008-1-13 at 05:43 PM ]
作者: honghunter     时间: 2008-1-12 11:17
firefox的HTML文件片段:(可见其目录的标示方式)

其中蓝色的字需要提取出来作为目录的判断;
其中红色的字需要提取出来作为快捷方式的目标URL和名称。


    <DT><H3 ADD_DATE="1161821881" LAST_MODIFIED="1199674483" ID="rdf:#$e43AY2">00-TMP</H3>
    <DL><p>
        <DT><A HREF="http://www-128.ibm.com/developerworks/cn/java/j-ap08016/" ADD_DATE="1167301343" LAST_VISIT="1199494442" LAST_MODIFIED="1199458910" ICON="data:image/x-icon;base64,AAABAAEAEBAQAAAAAAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAIAAAJhlAACAgAAAAACAAACAgACAAIAAgICAAMDAwAAA/wAA/wAAAP//AAAAAP8AAP//AP8A/wD///8AIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiL/8v/yLy8vIi8i8i8vLy8iLyL/8i/y/yIvIvIvL/L/Iv/y//IvIi8iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//" LAST_CHARSET="UTF-8" ID="rdf:#$1PYj22">让开发自动化: 持续检查</A>
<DD>利用源代码分析工具,自动获得关于代码复杂性、重复程度、符合编码标准的程度,从而改进软件开发过程。
        <DT><A HREF="http://forum.ubuntu.org.cn/index.php?sid=6c885f42cc736f815a552322ca5d9e56" ADD_DATE="1199494790" LAST_CHARSET="UTF-8" ID="rdf:#$VUikw1">Ubuntu中文 论坛 :: 首页</A>
        <DT><A HREF="http://www.cn-dos.net/forum/index.php" ADD_DATE="1199494803" LAST_CHARSET="UTF-8" ID="rdf:#$WUikw1">中国DOS联盟论坛 - 中国DOS联盟之联合DOS论坛</A>
<DD>中国DOS联盟论坛 - 中国DOS联盟
        <DT><A HREF="http://www.cnblogs.com/jobs/archive/2004/08/13/33065.aspx" ADD_DATE="1199506620" LAST_VISIT="1199670206" ICON="data:image/x-icon;base64,AAABAAEAEBD/AAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3NzcAOvOrwD+18MA////AIvLrwCP1OYA686wAJW28gDkyKkAiKnmANSumgD52s4A96ysAP+ioQDKpZUArntwAP+9YAD/2JYA6sSmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAAAAAAICAgICAgICAgICAQAAAAACAwQEBAQEBAQEAgEAAAAAAgMAAAQAAAAEBAAAAAAAAAIDAAUABgQEBAQAAQAAAAAHBwAEAAAAAAQIAAEAAAAACQIABAAEBAAKCgABAAAAAAAABAQEAAAAAAAAAAAAAAACAwQEBAQEBAQEAAEAAAAAAgMEBAQEBAQEBAsBAAAAAAIDBAQEBAQMDQ4PAQAAAAACAwQEBAQEEBAQEAAAAAAAAgMEBAQEBBAREgEAAAAAAAIDAwMDAwMQEgEAAAAAAAACAgICEwsPEAEAAAAAAAAAAAAAAAAAAAAAAAAAAPABAADgAQAA4AEAAEABAADAAQAAwAEAAMABAADAAQAA4AEAAOABAADgAQAA4AMAAOADAADgBwAA4A8AAP//AAA=" LAST_CHARSET="UTF-8" ID="rdf:#$XUikw1">测试开发驱动实践 - 温少的日志 - 网志园</A>
        <DT><A HREF="http://www.cnblogs.com/unruledboy/archive/2004/08/13/33227.html" ADD_DATE="1199506643" LAST_VISIT="1199804081" LAST_CHARSET="UTF-8" ID="rdf:#$YUikw1">关于Peer Review、代码评审和测试驱动等 - 灵感之源 - 网志园</A>
    </DL><p>
    <DT><H3 ADD_DATE="1161821882" LAST_MODIFIED="1199459806" ID="rdf:#$B43AY2">01-办公</H3>
    <DL><p>
    </DL><p>
    <DT><H3 ADD_DATE="1161821882" LAST_MODIFIED="1199458910" ID="rdf:#$o53AY2">02-常用</H3>
    <DL><p>
        <DT><A HREF=

[ Last edited by honghunter on 2008-1-13 at 05:46 PM ]
作者: honghunter     时间: 2008-1-12 11:36
遇到一个新问题,ff的html文件是utf8的,想要转成GBK的时候,使用如下格式调用无奈何版主的“GBK & UTF8 编码互转脚本 (CMD+GAWK)"生成的文件好像还是UTF8的。

call gbk2utf8.cmd /u /i bookmarks-2008-01-11.html >bookmarks.html


奈何版主的“GBK & UTF8 编码互转脚本 (CMD+GAWK)"取自:
http://www.cn-dos.net/forum/view ... &highlight=UTF8
作者: honghunter     时间: 2008-1-12 11:39
看来使用第三方工具是避免不了,那么只有希望少使用几个了。
作者: honghunter     时间: 2008-1-12 22:40
自己顶一下,期待大侠们的意见和建议。
作者: honghunter     时间: 2008-1-13 17:07
自己顶一下,期待大侠们的意见和建议。
作者: lxmxn     时间: 2008-1-13 17:30
我觉得你可以用不同的颜色把需要提取的URL和名称标记一下,这样更方便别人思考,节省时间。
作者: honghunter     时间: 2008-1-13 17:42
好的,我这就弄一下.
作者: lxmxn     时间: 2008-1-13 19:16


  Quote:
@echo %bg% off & setlocal EnableDelayedExpansion

for /f "delims=<> tokens=1-5" %%a in ('findstr /i "<DT><H3[^>]*>.*</H3> <DT><A[^>]*>.*</A>" FireFox的HTML收藏夹文件') do (
    if /i "%%e"=="/H3" (echo\&echo\-----&echo md %%d)
    if /i "%%e"=="/A" (
        (for /f "usebackq tokens=2" %%a in ('%%c') do (
            set mystr=%%a
            echo/!mystr:~5!
        )) 2>nul
        echo %%d
    )
)
endlocal&pause

[ Last edited by lxmxn on 2008-1-13 at 07:18 PM ]
作者: honghunter     时间: 2008-1-13 23:34
lxmxn 版主太厉害啦,让我好好学习一下。
作者: honghunter     时间: 2008-1-14 10:07
lxmxn版主的这段脚本太强悍了,学到了,再次感谢。


除了3楼说的问题还没有找到解决方法外,我又遇到问题了,继续请教。

早上试验了一下,如果有二级目录的话,ff的那个收藏夹文件格式如下,9楼的代码也能解析出来。但是我的问题是,批处理中,是否能检查一个环境变量是由4个还是8个空格组成的哪?
(00-TMP那行前面有4个空格,sub_temp那行前面是8个空格。我还试验了一下,在sub_temp下面再加上三级目录的话,前面就是12个空格。)


<!DOCTYPE NETSCAPE-Bookmark-file-1>
<!-- This is an automatically generated file.
     It will be read and overwritten.
     DO NOT EDIT! -->
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<TITLE>Bookmarks</TITLE>
<H1 LAST_MODIFIED="1200273255">Bookmarks</H1>

<DL><p>
    <DT><H3 ADD_DATE="1161821881" LAST_MODIFIED="1200273262" ID="rdf:#$e43AY2">00-TMP</H3>
    <DL><p>
        <DT><A HREF="http://www.cn-dos.net/forum/index.php" ADD_DATE="1199494803" LAST_CHARSET="UTF-8" ID="rdf:#$WUikw1">中国DOS联盟论坛 - 中国DOS联盟之联合DOS论坛</A>
<DD>中国DOS联盟论坛 - 中国DOS联盟
        <DT><H3 ADD_DATE="1200273240" LAST_MODIFIED="1200273262" ID="rdf:#$i.90z1">sub_temp</H3>
        <DL><p>

            <DT><A HREF="http://forum.ubuntu.org.cn/index.php?sid=6c885f42cc736f815a552322ca5d9e56" ADD_DATE="1199494790" LAST_CHARSET="UTF-8" ID="rdf:#$VUikw1">Ubuntu中文 论坛 :: 首页</A>
        </DL><p>
    </DL><p>
    <DT><H3 ADD_DATE="1161821882" LAST_MODIFIED="1199459806" ID="rdf:#$B43AY2">01-办公</H3>
    <DL><p>
    </DL><p>
    <DT><H3 ADD_DATE="1161821882" LAST_MODIFIED="1199458910" ID="rdf:#$o53AY2">02-常用</H3>
    <DL><p>
作者: honghunter     时间: 2008-1-14 10:56
我尝试用循环来组合多个空格到一个环境变量中,不知道哪里错了,改来改去,还是不行。


@echo on & setlocal enabledelayedexpansion
set "temp_path=        "
set "temp_space=    1"
for %%i in (1 2 3 4 5) do (
set "temp_spac1=%temp_space%"
set "temp_space=    %temp_spac1%"
echo "temp_space=%temp_space%#"
if "#%temp_path%1"=="#%temp_space%" set "temp_path=%%i"
echo temp_path=%temp_path%0
)
作者: lxmxn     时间: 2008-1-14 18:03    标题: to honghunter:

其实我9楼的脚本的for循环里面,%%a就是每行前面的空格,你可以用类似如下的语句来简单判断它里面的空格数:
if "#%%a#"=="#    #" echo It has 4 spaces
if "#%%a#"=="#        #" echo It has 8 spaces
类推。。

ps 最近要期末考试,没什么时间来回复兄的贴子,望见谅。
作者: honghunter     时间: 2008-1-14 18:10
谢谢 lxmxn 版主 的再次回复,我知道13楼这种做法,现在也就是这样判断的。

只是想尝试一下看能不能用循环来组合一个,这样就不用随着支持的目录深度而增加批处理的行数了。(因为13楼做法要为每个目录深度写一行判断,不过其实这个也无所谓,因为至少我自己是不会把收藏夹弄出超过3层的深度的,呵呵)



再次感谢  lxmxn 版主百忙之中给与帮助。
作者: lxmxn     时间: 2008-1-14 18:31    标题: TO honghunter:

对于你说的深度,其实就是指%%a中缩进的长度吧?

因为这个%%a里面全部是空格,那么你可以用
echo/%%a|findstr /c:"^ *$" >nul && do_your_command
来判断并执行你需要执行的命令,解决问题最终还是一个思路的问题。
作者: honghunter     时间: 2008-1-14 18:54
再次感谢!

这个问题解决了,现在已经正确取出来了。目前只剩下3楼说道的,UTF8转成GBK的问题了,我回到家再查查。



@echo off & color 02 & setlocal enabledelayedexpansion

@rem/ init
set temp_path_last=1

for /f "delims=<> tokens=1-5" %%a in ('findstr /i "<DT><H3[^>]*>.*</H3> <DT><A[^>]*>.*</A>" bookmarks_ansi.html') do (
@rem/                echo a=%%a;b=%%b;c=%%c;d=%%d;e=%%e;
    if /i "%%e"=="/H3" (echo\&echo\-----& call:sub_fix_path "#%%a#" %%d)
    if /i "%%e"=="/A" (
        (for /f "usebackq tokens=2" %%a in ('%%c') do (
            set mystr=%%a
            echo url=!mystr:~5!;
        )) 2>nul
        echo notes=%%d
    )
)
endlocal&pause
goto :eof


:sub_fix_path

        set temp_path=%~1
        set temp_path_name=%2

        if "%temp_path%"=="#    #" set temp_path=1
        if "%temp_path%"=="#        #" set temp_path=2
        if "%temp_path%"=="#            #" set temp_path=3
        if "%temp_path%"=="#                #" set temp_path=4
        if "%temp_path%"=="#                    #" set temp_path=5
        if "%temp_path%"=="#                        #" set temp_path=6
       
  set "tmp_dir%temp_path%=%temp_path_name%\\"
  
  if %temp_path% EQU 1 ( set "tmp_dir2=" & set "tmp_dir3=" & set "tmp_dir4=" & set "tmp_dir5=" )
  if %temp_path% EQU 2 ( set "tmp_dir3=" & set "tmp_dir4=" & set "tmp_dir5=" )
  if %temp_path% EQU 3 ( set "tmp_dir4=" & set "tmp_dir5=" )
  if %temp_path% EQU 4 ( set "tmp_dir5=" )
  
  set temp_path_full=%tmp_dir1%%tmp_dir2%%tmp_dir3%%tmp_dir4%%tmp_dir5%
  set temp_path_last=%temp_path%
  
  echo mkdir "%temp_path_full%"

goto :eof
作者: honghunter     时间: 2008-1-14 18:56
目前的输出效果(批处理文件见16楼)



-----
mkdir "00-TMP\\"
url="http://www-128.ibm.com/developerworks/cn/java/j-ap08016/";
notes=让开发自动化: 持续检查
url="http://www.cn-dos.net/forum/index.php";
notes=中国DOS联盟论坛 - 中国DOS联盟之联合DOS论坛
url="http://www.cnblogs.com/jobs/archive/2004/08/13/33065.aspx";
notes=测试开发驱动实践 - 温少的日志 - 网志园
url="http://www.cnblogs.com/unruledboy/archive/2004/08/13/33227.html";
notes=关于Peer Review、代码评审和测试驱动等 - 灵感之源 - 网志园

-----
mkdir "00-TMP\\sub_temp\\"
url="http://forum.ubuntu.org.cn/index.php?sid=6c885f42cc736f815a552322ca5d9e56";
notes=Ubuntu中文 论坛 :: 首页

-----
mkdir "01-办公\\"

-----
mkdir "02-常用\\"
作者: honghunter     时间: 2008-1-16 00:37
3楼说道的,UTF8转成GBK的问题也解决了。是用论坛里面的代码改的。

现在一般的已经可以了,存在的问题是:怎么得到一个有效的文件名?


类似下面这样的命令会报错:

Shortcut.exe /f:"E:\aaaaaa\K05_sys\Favorites\00-TMP\\sub_temp\\sub2\\Ubuntu中文 论坛 :: 首页.lnk" /a:c /t:"http://forum.ubuntu.org.cn/index.php?sid=6c885f42cc736f815a552322ca5d9e56"

System error 87 has occurred.

参数不正确。


正确的例子如下:
Shortcut.exe /f:"E:\aaaaaa\K05_sys\Favorites\02-常用\\LWP 与 WEB 的基本使用.lnk" /a:c /t:"http://www.perlchina.org/archive/archive.php?action=archive&page=15"

The command completed successfully.

[ Last edited by honghunter on 2008-1-16 at 12:39 AM ]
作者: honghunter     时间: 2008-1-16 00:41
我数了一下, 87应该就是“Ubuntu中文 论坛 :: 首页.lnk”中的那个":"在命令行的位置。
作者: honghunter     时间: 2008-1-16 01:25
对于这个问题,我目前考虑的做法是:
尝试把可能出现在其中的,但是有不能成为文件名组成部分的字符串替换掉。

在论坛里面搜索了一阵,还是觉得无从下手。