[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 ppll2030 于 2024-7-6 15:10 编辑

VBA不熟。就不搀和了。习惯了用批处理,看看合不合用吧。
注意:
代码一定一定要保存为UTF-8格式的bat文件。
bat文件跟pdftk.exe文件放一块。
书签明细可在脚本后修改。
PDF文件支持拖放,也可打开后手动输入。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 注意::一定要保存为UTF-8格式的bat文件
  4. chcp 65001 >nul
  5. :start
  6. set f=%1
  7. if not defined f echo. &set /p f=输入要添加书签的PDF文件:
  8. if not defined f echo.&pause&cls&goto :start
  9. for %%i in ("%f%") do set _nf=%%~ni&set _xf=%%~xi
  10. set /a n=1
  11. rem skip数值以 "以下为书签名单" 所在行为准
  12. (for /f "skip=24 tokens=* delims=" %%a in ('type "%~f0"') do (
  13.         set str=%%a
  14.         echo BookmarkBegin
  15.         echo BookmarkTitle: !str!
  16.         echo BookmarkLevel: 1
  17.         echo BookmarkPageNumber: !n!
  18.         set /a n+=1
  19. ))>bookmark.txt
  20. pdftk "%f%" update_info_utf8 bookmark.txt output "%_nf%_bookmark%_xf%"
  21. del /q bookmark.txt
  22. pause&exit
  23. 以下为书签名单:
  24. 红旗小学1
  25. 红旗小学2
  26. 红旗小学3
  27. 红旗小学4
  28. 红旗小学5
  29. 红旗小学6
  30. 红旗小学7
  31. 红旗小学8
  32. 红旗小学9
  33. 红旗小学10
  34. 红旗小学11
  35. 红旗小学12
  36. 红旗小学13
  37. 红旗小学14
  38. 红旗小学15
  39. 红旗小学16
  40. 红旗小学17
  41. 红旗小学18
  42. 红旗小学19
  43. 红旗小学20
  44. 红旗小学21
  45. 红旗小学22
  46. 红旗小学23
  47. 红旗小学24
  48. 红旗小学25
  49. 红旗小学26
  50. 红旗小学27
  51. 红旗小学28
  52. 红旗小学29
  53. 红旗小学30
复制代码

TOP

回复 3# qd2024


    把12行的内容改一下就可以了。
自己新建一个标签.txt,一行开始直接放标签明细即可。
  1. (for /f "delims=" %%a in ('type "标签.txt"') do (
复制代码

TOP

回复 5# qd2024


    你把标签.txt也要保存为UTF-8的格式就可以了。

TOP

本帖最后由 ppll2030 于 2024-7-7 13:13 编辑

回复 5# qd2024


    再次修改了一下脚本,这样你就不需要把PDF文件跟脚本放一块了。这样应该更方便一些。
注意:
代码一定要保存为UTF-8编码格式的bat文件,跟pdftk放置一块
标签.txt一定一定要保存为UTF-8编码格式的txt文件
标签.txt和PDF放在一起即可,不需要把他俩复制粘到pdftk的同一个文件夹内。
直接拖拽PDF到bat上面即可,也可先打开bat,再拖拽过去,或复制PDF完整路径进来。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 注意::一定要保存为UTF-8格式的bat文件
  4. chcp 65001 >nul
  5. :start
  6. set f=%1
  7. if not defined f echo. &set /p f=输入要添加书签的PDF文件:
  8. if not defined f echo.&pause&cls&goto :start
  9. for /f "delims=" %%i in ("%f%") do set _nf=%%~dpni&set _xf=%%~xi&set _pf=%%~dpi
  10. set /a n=1
  11. rem 标签.txt一定一定要保存为UTF-8编码格式的txt文件
  12. (for /f "delims=" %%a in ('type "!_pf!标签.txt"') do (
  13.         set str=%%a
  14.         echo BookmarkBegin
  15.         echo BookmarkTitle: !str!
  16.         echo BookmarkLevel: 1
  17.         echo BookmarkPageNumber: !n!
  18.         set /a n+=1
  19. ))>!_pf!bookmark.txt
  20. %~dp0pdftk "!f!" update_info_utf8 "!_pf!bookmark.txt" output "!_nf!_bookmark!_xf!"
  21. del /q !_pf!bookmark.txt
  22. echo.&echo.书签添加完毕!&timeout /t 3 &exit
复制代码

TOP

本帖最后由 ppll2030 于 2024-7-7 16:04 编辑

回复 11# qd2024


    直接改动源文件比较危险哦。切记做好备份
关于桌面失败,可能是路径带空格的问题,现已修复,你可以再试试。
在代码第20行后面添加了两行,直接改动源文件,默认无备份,需要备份就去掉21行的两个::冒号。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 注意::一定要保存为UTF-8格式的bat文件
  4. chcp 65001 >nul
  5. :start
  6. set f=%1
  7. if not defined f echo. &set /p f=输入要添加书签的PDF文件:
  8. if not defined f echo.&pause&cls&goto :start
  9. for /f "delims=" %%i in ("%f%") do set _nf=%%~ni&set _xf=%%~xi&set _pf=%%~dpi
  10. set /a n=1
  11. (for /f "delims=" %%a in ('type "!_pf!标签.txt"') do (
  12.         set str=%%a
  13.         echo BookmarkBegin
  14.         echo BookmarkTitle: !str!
  15.         echo BookmarkLevel: 1
  16.         echo BookmarkPageNumber: !n!
  17.         set /a n+=1
  18. ))>bookmark.txt
  19. "%~dp0pdftk" !f! update_info_utf8 "!_pf!bookmark.txt" output "!_pf!!_nf!_bookmark!_xf!"
  20. rem 备份源文件,需要去掉前面两个 :: 冒号
  21. ::ren "!f!" "!_nf!_bak!_xf!"
  22. move /y "!_nf!_bookmark!_xf!" !f! >nul
  23. del /q "!_pf!bookmark.txt"
  24. echo.&echo.书签添加完毕!&timeout /t 3&exit
复制代码

TOP

本帖最后由 ppll2030 于 2024-7-8 17:25 编辑

回复 16# qd2024


经过77大佬的提醒和指导,目前拖拽和粘贴复制的方式都没有问题了。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 注意::一定要保存为UTF-8格式的bat文件
  4. chcp 65001 >nul
  5. :start
  6. set f=%1
  7. if not defined f echo. &set /p f=添加PDF文件(拖拽文件或者填写文件的完整路径):
  8. if not defined f echo.&pause&cls&goto :start
  9. set f=%f:"=%
  10. for /f "delims=" %%i in ("%f%") do set _nf=%%~ni&set _xf=%%~xi&set _pf=%%~dpi
  11. set /a n=1
  12. cd /d %_pf%
  13. (for /f "delims=" %%a in ('type "标签.txt"') do (
  14.         set str=%%a
  15.         echo BookmarkBegin
  16.         echo BookmarkTitle: !str!
  17.         echo BookmarkLevel: 1
  18.         echo BookmarkPageNumber: !n!
  19.         set /a n+=1
  20. ))>bookmark.txt
  21. "%~dp0pdftk" "!f!" update_info_utf8 bookmark.txt output "!_nf!_bookmark!_xf!"
  22. rem 备份源文件,需要去掉前面两个 :: 冒号
  23. ::ren "!f!" "!_nf!_bak!_xf!"
  24. move /y "!_nf!_bookmark!_xf!" "!f!" >nul
  25. del /q bookmark.txt
  26. echo.&echo.书签添加完毕!&timeout /t 3&exit
复制代码

TOP

回复  ppll2030


   6、7行的两种方式,%1会改变工作路径,而set /p却不会,%1含有空格加引号,而set  ...
77七 发表于 2024-7-8 15:13



    唉,学艺不精,这也是改了又改的原因了。一会儿拖拽成功,但粘贴路径有莫名bug
%1是为了拖拽功能,set /p 是为了粘贴复制,
我周围的人习惯不同,为了方便就都统一这么写了。
上面我也只是测试了拖拽的功能对空格文件名和路径没问题。回头再看看粘贴复制的情况吧。
至于%~dp0pdftk,也是无奈之举,不是同一目录的pdf文件,会提示:
'pdftk' is not recognized as an internal or external command,
operable program or batch file.
The system cannot find the file specified.
这也是之前我补齐所有文件的完整路径的原因。越搞越麻烦。哈哈
最后,感谢大佬的指点。让我对%1和set /p又有了一些新的认知。

TOP

回复 21# aloha20200628


    哈哈,老大的代码看不懂。就直接代楼主上自己的测试结果吧
1、脚本bat和标签.txt必须是ANSI,任意一个是utf-8结果就会乱码。都是ANSI下,结果正确。
2、多个pdf只会操作一个。

TOP

返回列表