
标题: [文本处理] [已解决]批处理如何对含有指定内容行的特定字段进行替换[附源码,求] [打印本页]
作者: kingshui 时间: 2013-3-11 11:29 标题: [已解决]批处理如何对含有指定内容行的特定字段进行替换[附源码,求]
本帖最后由 kingshui 于 2013-3-12 19:30 编辑
昨晚写了个firefox启动器的批处理,对于prefs.js里的“download”那段本来是想用变量替换的方法来实现的,但是实在是想不出来好招。所以写了下面一堆来实现我要的效果。
求精简及指正
比如:路径的判读,这里没有实现。文本操作我总感觉我写的不够精简,求指正。谢谢- @echo off
- setlocal enableextensions
- cd /d %~dp0
-
- :checkini
- if exist myfirefox.ini goto downdir
- echo [Settings]>myfirefox.ini
- echo FirefoxPath=Firefox\firefox.exe>>myfirefox.ini
- echo ProfileDir=profiles>>myfirefox.ini
- echo CustomPluginsDir=plugin>>myfirefox.ini
- echo CustomCacheDir=>>myfirefox.ini
- echo CheckDefaultBrowser=1>>myfirefox.ini
- echo params=/Prefetch:1 -turbo>>myfirefox.ini
- echo DownDir=Downloads>>Myfirefox.ini
-
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('findstr "=" Myfirefox.ini') do set %%i
-
- :cleancache
- if exist %ProfileDir%\cache ( rd /s/q %ProfileDir%\cache )
- if exist %ProfileDir%\_CACHE_CLEAN_ ( del /f/q %ProfileDir%\_CACHE_CLEAN_ )
- if exist cache rd /s/q cache
- if exist _cache_clean_ del /f/q _cache_clean_
-
- :downdir
- if not exist %DownDir% md %DownDir%
- set prefs=%~dp0%ProfileDir%\prefs.js
- set downdir=%~dp0%DownDir%
- set dirname=%downdir:\=\\%
- set "ddir=user_pref("browser.download.folderList", 2);"
- set "downdir=user_pref("browser.download.dir","%dirname%");"
- find "browser.download.dir" %prefs%
- set msg=%errorlevel%
- if %msg% equ 1 (
- echo,>> %prefs%
- echo !downdir! >> %prefs%
- )
- if %msg% equ 0 (
- findstr /v "browser.download.dir" %prefs%>str
- move /y str %prefs%
- echo,>> %prefs%
- echo !downdir! >> %prefs%
- )
-
- find "user_pref("browser.download.folderList", 2);" %prefs%
- set ddirerror=%errorlevel%
- if %ddirerror% equ 1 (
- echo,>> %prefs%
- echo !ddir! >> %prefs%
- )
- if %ddirerror% equ 0 (
- findstr /v "browser.download.folderList" %prefs%>dstr
- move /y dstr %prefs%
- echo,>> %prefs%
- echo !ddir! >> %prefs%
- )
-
- :run
- 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
不好意思,没表达清楚,
如
- 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 - @echo off
- for /f tokens^=1-5^ delims^=^" %%a in (a.txt) do (
- echo %%a"%%b"%%c"%~dp0Downloads"%%e
- )
复制代码
作者: kingshui 时间: 2013-3-12 08:37
本帖最后由 kingshui 于 2013-3-12 10:39 编辑
回复 4# Batcher
非常感谢,不过prefs.js是多行内容- # Mozilla User Preferences
-
- /* Do not edit this file.
- *
- * If you make changes to this file while the application is running,
- * the changes will be overwritten when the application exits.
- *
- * To make a manual change to preferences, you can visit the URL about:config
- */
-
- user_pref("app.update.lastUpdateTime.addon-background-update-timer", 1363012569);
- user_pref("app.update.lastUpdateTime.background-update-timer", 1363042459);
- user_pref("app.update.lastUpdateTime.blocklist-background-update-timer", 1363012689);
- user_pref("app.update.lastUpdateTime.browser-cleanup-thumbnails", 1363046299);
- user_pref("app.update.lastUpdateTime.search-engine-update-timer", 1363035379);
- user_pref("browser.cache.disk.capacity", 358400);
- user_pref("browser.cache.disk.smart_size.first_run", false);
- user_pref("browser.cache.disk.smart_size.use_old_max", false);
- user_pref("browser.cache.disk.smart_size_cached_value", 358400);
- user_pref("browser.download.dir", "X:\\PortableAPPC\\MyFirefox\\Downloads");
- user_pref("browser.download.folderList", 2);
- user_pref("browser.download.panel.firstSessionCompleted", true);
- user_pref("browser.download.panel.shown", true);
- user_pref("browser.migration.version", 9);
- user_pref("browser.newtabpage.enabled", false);
- user_pref("browser.newtabpage.storageVersion", 1);
- user_pref("browser.pagethumbnails.storage_version", 3);
- user_pref("browser.panorama.experienced_first_run", true);
- user_pref("browser.panorama.session_restore_enabled_once", true);
- user_pref("browser.places.smartBookmarksVersion", 4);
- user_pref("browser.preferences.advanced.selectedTabIndex", 4);
- user_pref("browser.rights.3.shown", true);
- user_pref("browser.safebrowsing.enabled", false);
- user_pref("browser.safebrowsing.malware.enabled", false);
- user_pref("browser.search.selectedEngine", "Google AS - 中文网页");
- user_pref("browser.sessionstore.restore_on_demand", false);
- user_pref("browser.shell.checkDefaultBrowser", false);
- user_pref("browser.startup.homepage", "chrome://ubufox/locale/ubufox.properties");
- user_pref("browser.startup.homepage_override.buildID", "20130310030906");
- user_pref("browser.startup.homepage_override.mstone", "22.0a1");
- user_pref("browser.startup.page", 3);
- user_pref("browser.syncPromoViewsLeftMap", "{\"passwords\":0}");
- user_pref("browser.tabs.warnOnClose", false);
- user_pref("capability.policy.maonoscript.javascript.enabled", "allAccess");
复制代码
是不是用以下这段会比较好点?- setlocal enabledelayedexpansion
- if not exist %DownDir% md %DownDir%
- set prefs=%~dp0%PFDir%\prefs.js
- set downdir=%~dp0%DownDir%
- set dirname=%downdir:\=\\%
- set ddir=user_pref("browser.download.folderList", 2);
- set downdir=user_pref("browser.download.dir","%dirname%");
- set count=0
- for /f "skip=2" delims=[] tokens=1" %%i in ('find /n "browser.download.dir" %prefs%) do (
- set /a row=%%i-2
- for /f "delims=" %%j in (%prefs%) do (
- set /a count=!count!+1
- if !count! equ !row! (echo !downdir!>>str) else (echo %%j>>str)
- )
- )
复制代码
要认真学习了。楼上的批完全理解了之后应该会明白很多,谢谢,非常感谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |