Board logo

标题: [文本处理] [已解决]批处理如何对含有指定内容行的特定字段进行替换[附源码,求] [打印本页]

作者: kingshui    时间: 2013-3-11 11:29     标题: [已解决]批处理如何对含有指定内容行的特定字段进行替换[附源码,求]

本帖最后由 kingshui 于 2013-3-12 19:30 编辑

昨晚写了个firefox启动器的批处理,对于prefs.js里的“download”那段本来是想用变量替换的方法来实现的,但是实在是想不出来好招。所以写了下面一堆来实现我要的效果。
求精简及指正
比如:路径的判读,这里没有实现。文本操作我总感觉我写的不够精简,求指正。谢谢
  1. @echo off
  2. setlocal enableextensions
  3. cd /d %~dp0
  4. :checkini
  5. if exist myfirefox.ini goto downdir
  6. echo [Settings]>myfirefox.ini
  7. echo FirefoxPath=Firefox\firefox.exe>>myfirefox.ini
  8. echo ProfileDir=profiles>>myfirefox.ini
  9. echo CustomPluginsDir=plugin>>myfirefox.ini
  10. echo CustomCacheDir=>>myfirefox.ini
  11. echo CheckDefaultBrowser=1>>myfirefox.ini
  12. echo params=/Prefetch:1 -turbo>>myfirefox.ini
  13. echo DownDir=Downloads>>Myfirefox.ini
  14. setlocal enabledelayedexpansion
  15. for /f "delims=" %%i in ('findstr "=" Myfirefox.ini') do set %%i
  16. :cleancache
  17. if exist %ProfileDir%\cache ( rd /s/q %ProfileDir%\cache )
  18. if exist %ProfileDir%\_CACHE_CLEAN_ ( del /f/q %ProfileDir%\_CACHE_CLEAN_ )
  19. if exist cache rd /s/q cache
  20. if exist _cache_clean_ del /f/q _cache_clean_
  21. :downdir
  22. if not exist %DownDir% md %DownDir%
  23. set prefs=%~dp0%ProfileDir%\prefs.js
  24. set downdir=%~dp0%DownDir%
  25. set dirname=%downdir:\=\\%
  26. set "ddir=user_pref("browser.download.folderList", 2);"
  27. set "downdir=user_pref("browser.download.dir","%dirname%");"
  28. find "browser.download.dir" %prefs%
  29. set msg=%errorlevel%
  30. if %msg% equ 1 (
  31. echo,>> %prefs%
  32. echo !downdir! >> %prefs%
  33. )
  34. if %msg% equ 0 (
  35. findstr /v "browser.download.dir" %prefs%>str
  36. move /y str %prefs%
  37. echo,>> %prefs%
  38. echo !downdir! >> %prefs%
  39. )
  40. find "user_pref("browser.download.folderList", 2);" %prefs%
  41. set ddirerror=%errorlevel%
  42. if %ddirerror% equ 1 (
  43. echo,>> %prefs%
  44. echo !ddir! >> %prefs%
  45. )
  46. if %ddirerror% equ 0 (
  47. findstr  /v "browser.download.folderList" %prefs%>dstr
  48. move /y dstr %prefs%
  49. echo,>> %prefs%
  50. echo !ddir! >> %prefs%
  51. )
  52. :run
  53. start %FirefoxPath% -profile %ProfileDir% %params%
复制代码

作者: Batcher    时间: 2013-3-11 13:36

你想把prefs.js里面的什么内容替换成什么?
作者: kingshui    时间: 2013-3-11 18:55

本帖最后由 kingshui 于 2013-3-11 19:19 编辑

回复 2# Batcher

不好意思,没表达清楚,

  1. user_pref("browser.download.dir", "X:\\PortableAPPC\\MyFirefox\\Downloads");
复制代码

这里面的"X:\\PortableAPPC\\MyFirefox\\Downloads"这一节,因为要经常移动,所以这个目录会变,我想把他自动替换成当前目录下的Downloads目录

不知道可不可以把这一节的随机(算是随机吧,反正不固定)的内容截掉来替换成%~dp0Downloads呢?
可不可以 用for /f "tokens=3,4* delims=" 这个方法截取呢?不知道怎么用双引号作截断。
请指点,谢谢。
作者: Batcher    时间: 2013-3-11 20:48

回复 3# kingshui
  1. @echo off
  2. for /f tokens^=1-5^ delims^=^" %%a in (a.txt) do (
  3.     echo %%a"%%b"%%c"%~dp0Downloads"%%e
  4. )
复制代码

作者: kingshui    时间: 2013-3-12 08:37

本帖最后由 kingshui 于 2013-3-12 10:39 编辑

回复 4# Batcher

非常感谢,不过prefs.js是多行内容
  1. # Mozilla User Preferences
  2. /* Do not edit this file.
  3. *
  4. * If you make changes to this file while the application is running,
  5. * the changes will be overwritten when the application exits.
  6. *
  7. * To make a manual change to preferences, you can visit the URL about:config
  8. */
  9. user_pref("app.update.lastUpdateTime.addon-background-update-timer", 1363012569);
  10. user_pref("app.update.lastUpdateTime.background-update-timer", 1363042459);
  11. user_pref("app.update.lastUpdateTime.blocklist-background-update-timer", 1363012689);
  12. user_pref("app.update.lastUpdateTime.browser-cleanup-thumbnails", 1363046299);
  13. user_pref("app.update.lastUpdateTime.search-engine-update-timer", 1363035379);
  14. user_pref("browser.cache.disk.capacity", 358400);
  15. user_pref("browser.cache.disk.smart_size.first_run", false);
  16. user_pref("browser.cache.disk.smart_size.use_old_max", false);
  17. user_pref("browser.cache.disk.smart_size_cached_value", 358400);
  18. user_pref("browser.download.dir", "X:\\PortableAPPC\\MyFirefox\\Downloads");
  19. user_pref("browser.download.folderList", 2);
  20. user_pref("browser.download.panel.firstSessionCompleted", true);
  21. user_pref("browser.download.panel.shown", true);
  22. user_pref("browser.migration.version", 9);
  23. user_pref("browser.newtabpage.enabled", false);
  24. user_pref("browser.newtabpage.storageVersion", 1);
  25. user_pref("browser.pagethumbnails.storage_version", 3);
  26. user_pref("browser.panorama.experienced_first_run", true);
  27. user_pref("browser.panorama.session_restore_enabled_once", true);
  28. user_pref("browser.places.smartBookmarksVersion", 4);
  29. user_pref("browser.preferences.advanced.selectedTabIndex", 4);
  30. user_pref("browser.rights.3.shown", true);
  31. user_pref("browser.safebrowsing.enabled", false);
  32. user_pref("browser.safebrowsing.malware.enabled", false);
  33. user_pref("browser.search.selectedEngine", "Google AS - 中文网页");
  34. user_pref("browser.sessionstore.restore_on_demand", false);
  35. user_pref("browser.shell.checkDefaultBrowser", false);
  36. user_pref("browser.startup.homepage", "chrome://ubufox/locale/ubufox.properties");
  37. user_pref("browser.startup.homepage_override.buildID", "20130310030906");
  38. user_pref("browser.startup.homepage_override.mstone", "22.0a1");
  39. user_pref("browser.startup.page", 3);
  40. user_pref("browser.syncPromoViewsLeftMap", "{\"passwords\":0}");
  41. user_pref("browser.tabs.warnOnClose", false);
  42. user_pref("capability.policy.maonoscript.javascript.enabled", "allAccess");
复制代码
是不是用以下这段会比较好点?
  1. setlocal enabledelayedexpansion
  2. if not exist %DownDir% md %DownDir%
  3. set prefs=%~dp0%PFDir%\prefs.js
  4. set downdir=%~dp0%DownDir%
  5. set dirname=%downdir:\=\\%
  6. set ddir=user_pref("browser.download.folderList", 2);
  7. set downdir=user_pref("browser.download.dir","%dirname%");
  8. set count=0
  9. for /f "skip=2" delims=[] tokens=1" %%i in  ('find /n "browser.download.dir" %prefs%) do (
  10. set /a row=%%i-2
  11. for /f "delims=" %%j in (%prefs%) do (
  12. set /a count=!count!+1
  13. if !count! equ !row! (echo !downdir!>>str) else (echo %%j>>str)
  14. )
  15. )
复制代码
要认真学习了。楼上的批完全理解了之后应该会明白很多,谢谢,非常感谢




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2