找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28785|回复: 4

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

[复制链接]
发表于 2013-3-11 11:29:42 | 显示全部楼层 |阅读模式
本帖最后由 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%
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-3-11 13:36:28 | 显示全部楼层
你想把prefs.js里面的什么内容替换成什么?
 楼主| 发表于 2013-3-11 18:55:21 | 显示全部楼层
本帖最后由 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=" 这个方法截取呢?不知道怎么用双引号作截断。
请指点,谢谢。
发表于 2013-3-11 20:48:18 | 显示全部楼层
回复 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. )
复制代码
 楼主| 发表于 2013-3-12 08:37:53 | 显示全部楼层
本帖最后由 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. )
复制代码
要认真学习了。楼上的批完全理解了之后应该会明白很多,谢谢,非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 02:32 , Processed in 0.019019 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表