|
15楼#
发布于:2009-08-28 20:20
OK已经初步完成,目前在中文Windows 7下测试通过
@echo off
echo 请确保Firefox正在运行
pause
set current=%cd%
cd /d %appdata%\mozilla\firefox\
for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"Default=1" profiles.ini') do set /a "Row=%%i-2"
for /f "skip=%Row% tokens=2 delims==" %%j in (profiles.ini) do (cd /d %%j && goto :continue)
:continue
IF EXIST parent.lock goto doecho
echo 没有找到正确的配置文件夹,退出
goto doquit
:doecho
echo 成功找到配置文件
taskkill /im firefo*
ping 127.0.0.1 -n 3 >NUL
::--------------------需要加入的设置-------------------
echo user_pref("extensions.checkCompatibility", false); >>user.js
echo user_pref("extensions.checkUpdateSecurity", false); >>user.js
::--------------------需要加入的设置-------------------
echo 成功写入"user.js"文件
goto doquit
:doquit
cd /d %current%
echo 拜拜
几点说明: 1. 判断parent.lock实在是出于保险之举,所以要求用户不要关闭Firefox,以确保在正确的配置文件夹下工作。 2. taskkill没有必要用/f参数,否则Firefox是非法退出,相应的等待时间增加到了5秒。 |
|
|
|
16楼#
发布于:2009-08-28 20:20
将上面所讨论的整理成下面的代码,不过还不太理想。。。 (我没有对操作系统进行判断,而是对profiles.ini和profile.ini进行判断,应该都一样的,呵呵) @echo off
echo processing, please wait........
cd /d %appdata%\mozilla\firefox\
:: 由于if exist后面只能接一条语句,所以分开成两条处理,不知道有没有办法将两条语句合起来??
if exist profiles.ini (
for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"Default=1" profiles.ini') do (set /a "Row=%%i-2")
)
:: 如果配置文件的文件名都是英文的话(比如:XXXXXXX.default)可以正确处理;
:: 但是如果配置文件的文件名包含中文(比如:XXXXXXXX.默认配置),则%%j获得的是乱码,处理失败,请各位高手指点一下中文的问题。。。
if exist profiles.ini (
for /f "skip=%Row% tokens=2 delims==" %%j in (profiles.ini) do (cd /d %%j && goto :found)
)
if exist profile.ini (
for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"Default=1" profile.ini') do (set /a "Row=%%i-2")
)
if exist profile.ini (
for /f "skip=%Row% tokens=2 delims==" %%j in (profile.ini) do (cd /d %%j && goto :found)
)
goto :notfound
:found
::若进程存在则Kill,否则不kill
tasklist /fi "imagename eq firefo*" >NUL | findstr /s /i /m "firefo.*" >NUL && taskkill /f /im firefo* >NUL
ping 127.0.0.1 -n 3 >NUL
echo user_pref("extensions.checkCompatibility", false); >>user.js
echo user_pref("extensions.checkUpdateSecurity", false); >>user.js
echo File "user.js" processed, start your Firefox again.
echo ------------------------------------------
echo "succeeded!!!"
echo ------------------------------------------
goto :exit
:notfound
echo ------------------------------------------
echo "failed!!!"
echo ------------------------------------------
goto :exit
:exit
pause |
|
|
17楼#
发布于:2009-08-28 20:20
配置文件的文件名包含中文?这个即使是中文版的Firefox,默认也不会这样吧?其次安装过程中似乎也没有问用户给配置文件起名的这一步,也就是说,除非用户自己知道启动配置文件管理器去新建配置并起中文名,否则这个应该肯定是'default'
|
|
|
|
18楼#
发布于:2009-08-28 20:20
windows7下的文件也是profiles.ini(复数形式)?还有cd /d直接使用正斜杠也没问题?
|
|
|
19楼#
发布于:2009-08-28 20:20
但是如果配置文件的文件名包含中文(比如:XXXXXXXX.默认配置),则%%j获得的是乱码,处理失败 把批处理的文本改为ANSI格式编码。 不知道有没有办法将两条语句合起来 把切换目录的这一部分改进了一下,检测profile(s).ini的存在,不过暂时没有考虑替换正斜杠的情况(至少XP下正斜杠路径也能正常进入,windows7也可以?)。 cd /d %appdata%\mozilla\firefox\
if exist profile.ini (set filename=profile.ini) else (set filename=profiles.ini)
for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"Default=1" %filename%') do set /a "Row=%%i-2"
for /f "skip=%Row% tokens=2 delims==" %%j in (%filename%) do (cd /d %%j && goto :continue)
:continue |
|
|
20楼#
发布于:2009-08-28 20:20
win7是复数 正反能进
|
|
|
|
21楼#
发布于:2009-08-28 20:20
把批处理的文本改为ANSI格式编码。 我用记事本程序编辑批处理的时候,选择另存为,默认的就是ANSI格式编码,怎还不可以处理中文路径???怎样改呢 |
|
|
22楼#
发布于:2009-08-28 20:20
我用的notepad++
我测试了,用UTF-8就打不开中文名的路径,用ANSI就可以。不知道你那里为什么不行。试试我这个文件。 win7是复数 正反能进 就是不知道VISTA是怎么样的了。如果是profile.ini,又不支持cd正斜杠进入目录,还得把正斜杠替换为反斜杠才行。 |
|
|
|
23楼#
发布于:2009-08-28 20:20
用楼上的BAT文件还是不行哟。
我用firefox.exe -profilemanager打开配置管理器,然后添加一个配置,在我这里,新添加的配置文件后缀默认的是“配置文件”而不是“default"。Profiles/286yc9h2.default可以正常进入,而在进入“Profiles/2wi3owhf.配置文件”时因为出现中文而进入不了 我的profiles.ini内容如下: [General] StartWithLastProfile=1 [Profile0] Name=default IsRelative=1 Path=Profiles/286yc9h2.default [Profile1] Name=配置文件 IsRelative=1 Path=Profiles/2wi3owhf.配置文件 Default=1 |
|
|
24楼#
发布于:2009-08-28 20:20
此文太高深了,没有编程基础的人看不太明白,还是走捷径,只要因版本不同不让安装的,那就等着扩展的作者修改成高版本后再安了!
|
|
|
25楼#
发布于:2009-08-28 20:20
看看你profiles.ini文件的编码格式是不是ANSI。
|
|
|
26楼#
发布于:2009-08-28 20:20
我的profiles.ini文件的编码格式是UTF-8,默认就是这样的,难道也要改成ANSI么。。。。。。
|
|
|
27楼#
发布于:2009-08-28 20:20
看来是的了,因为我的profiles.ini默认是ANSI,听说find可以搜索UTF-8的文件,我正在尝试……
算了,听说Windows命令行默认不支持UTF-8。 shenyixin99你真的确定你的profiles.ini默认不是ANSI编码么? |
|
|
28楼#
发布于:2009-08-28 20:20
感谢Kmc的提醒,找到了替换的比较简单的办法。
现在考虑了profile(s).ini单复数的问题,以及cd /c不支持正斜杠的问题。shenyixin99的关于profiles.ini文件是UTF-8编码的问题不知道怎么办。 @echo off
echo 请确保Firefox正在运行
pause
set current=%cd%
cd /d %appdata%\mozilla\firefox\
if exist profile.ini (set filename=profile.ini) else (set filename=profiles.ini)
for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"Default=1" %filename%') do set /a "Row=%%i-2"
for /f "skip=%Row% tokens=2 delims==" %%j in (%filename%) do (
setlocal enabledelayedexpansion
set "pathstr=%%j"
set pathstr=!pathstr:/=\!
cd /d !pathstr!
goto :continue
)
:continue
IF EXIST parent.lock goto doecho
echo 没有找到正确的配置文件夹,退出
goto doquit
:doecho
echo 成功找到配置文件
taskkill /im firefo*
ping 127.0.0.1 -n 3 >NUL
::--------------------需要加入的设置-------------------
echo user_pref("extensions.checkCompatibility", false); >>user.js
echo user_pref("extensions.checkUpdateSecurity", false); >>user.js
::--------------------需要加入的设置-------------------
echo 成功写入"user.js"文件
goto doquit
:doquit
cd /d %current%
echo 拜拜
这样应该可以有更大的适用范围。 |
|
|
29楼#
发布于:2009-08-28 20:20
我的Profiles一安装FF就有的,确实是UTF-8编码
|
|