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

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

本帖最后由 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%
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

你想把prefs.js里面的什么内容替换成什么?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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=" 这个方法截取呢?不知道怎么用双引号作截断。
请指点,谢谢。

TOP

回复 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. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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. )
复制代码
要认真学习了。楼上的批完全理解了之后应该会明白很多,谢谢,非常感谢

TOP

返回列表