在Java中使用空格创建新的Firefox配置文件?
我可以使用以下命令在自定义目录中轻松创建新的Firefox配置文件:在Java中使用空格创建新的Firefox配置文件?,java,firefox,command-line,Java,Firefox,Command Line,我可以使用以下命令在自定义目录中轻松创建新的Firefox配置文件: String profileName = "ABC XYZ"; Runtime rt = Runtime.getRuntime(); String dir = "C:\\My Custom Dir\\profileName"; String executeCommand = "cmd.exe /c start firefox -Create
String profileName = "ABC XYZ";
Runtime rt = Runtime.getRuntime();
String dir = "C:\\My Custom Dir\\profileName";
String executeCommand = "cmd.exe /c start firefox -CreateProfile \"" + profileName.replaceAll("\s", "_") + " " + customFirefoxProfileDir + "\"";
Process process = rt.exec(executeCommand);
我遇到的问题是,如果我不将profileName
中的空格替换为下划线(或其他字符),则配置文件将仅使用profileName
中的第一个单词生成(即ABC而不是ABC XYZ)
经过一段时间的研究,我相信这种奇怪的现象源于这样一个事实
-CreateProfile\u名称
在默认目录中创建新配置文件,但不要启动
应用配置文件将在配置文件中命名为profile\u name
管理器,配置文件名称不能包含空格()
虽然我总是可以用下划线自动替换空白,但问题是我无法强制执行此约定,因为某些配置文件是通过使用空格选择用户配置文件对话框手动创建的
奇怪的是,当点击Firefox-选择用户配置文件对话框时,我可以随意命名它,包括和空格
所以我的问题是:有没有一种方法可以通过编程(用Java)创建一个新的Firefox配置文件,同时在实际的配置文件名中包含空格
我尝试用双引号括住
profileName
,但没有成功。您可以尝试使用不同于“键盘空格键”的whitespace字符
您可能希望查看此线程中的前两个答案:
B.t.w.以下是21年前的bug条目,解释了为什么这是不可能的: 但也许你可以从这个问题的公认答案中学到更多 在任何情况下,我都建议对runtime.exec使用另一种方法,该方法使用一个数组以避免与额外的引号混淆:
rt.exec(new String[] {"mkdir", "C:\\my test"});
如果有疑问,请使用sysinternals procmon观察屏幕后面到底发生了什么
还可以动态地编写一个<>代码> BAT< /C>或
@echo off
REM Put REM before the first line if you want to debug this script
IF "%~1"=="" ( echo please pass two arguments: the profile name and directory && goto END )
IF "%~2"=="" ( echo please pass two arguments, the profile name and directory && goto END )
REM Use %~1 instead of %1 to get rid of the double quotes of the invocation
set "FF_PROFILE_NAME=%~1"
set "FF_PROFILE_DIR=%~2"
IF exist "%FF_PROFILE_DIR%" ( echo directory already exists ) ELSE ( mkdir "%FF_PROFILE_DIR%" || exit %ERRORLEVEL%)
REM See: http://kb.mozillazine.org/Profiles.ini_file
set "PROFILE_CONFIG=%APPDATA%\Mozilla\Firefox\profiles.ini"
REM Let's make a backup first
copy "%PROFILE_CONFIG%" "%PROFILE_CONFIG%.bak-%RANDOM%%RANDOM%" >NUL
REM Find the highest profile number
REM TODO: Performance, stop looking if we found the highest profilenumber
REM TODO: Stop with error if we reach the highest profile number that we check for
FOR /L %%G IN (0,1,99) DO (findstr "\[Profile%%G\]" "%APPDATA%\Mozilla\Firefox\profiles.ini" >NUL && set "LAST_PROFILE=%%G")
SET /a NEXT_PROFILE=%LAST_PROFILE%+1
REM Write the new configuration section the ini file, appending it to the end:
ECHO.>> %PROFILE_CONFIG%
ECHO [Profile%NEXT_PROFILE%]>> %PROFILE_CONFIG%
ECHO Name=%FF_PROFILE_NAME%>> %PROFILE_CONFIG%
REM Escape with caret ^ the meaning of file descriptor numbers
ECHO IsRelative=^0>> %PROFILE_CONFIG%
ECHO Path=%FF_PROFILE_DIR%>> %PROFILE_CONFIG%
ECHO.>> %PROFILE_CONFIG%
:END
不确定是否有问题或在实际代码中输入了错别字,但
.replaceAll(“\s”,“\u”)
可能应该是.replaceAll(“\\s”,“\u”)
。replaceAll(“\s”,“\u”)工作正常,不确定您的意思,因为“\s”
不会在Java中编译。谢谢您的回复。然而,我正在寻找一种解决方案,允许我使用“键盘空格键”而不是模仿空格键的“黑客”来创建个人资料。谢谢你的回复,哇,没想到这可能与一个21岁的bug有关!似乎有些事情永远无法解决!在这两种情况下,您能否添加一个可以从Java调用的.bat或.cmd脚本的示例,以达到预期的目的?我不熟悉.bat/,cmd-only Java..而且我假设您建议对runtime.exec使用替代方法不是为了回答这个问题,而是一个附带建议。这是正确的吗?这不是一个附带的建议,而是一个替代的解决方案,如果你可以指向一个空目录并从它开始,为什么还要设置配置文件呢?但是,如果您真的希望配置文件出现在配置文件管理器中等。您可以自己编辑%APPDATA%\Mozilla\Firefox\profiles.ini并放入任意空间,请参阅:中的文档,如果您可以使用.bat/.cmd文件更新您的答案以达到预期目的,我将奖励您!谢谢添加了一个示例脚本,为了说明什么是可能的,请进行您自己的测试,向上投票并接受。我还没有测试,希望它能工作!