我正在尝试编写一个小批量脚本,将修改后的文件导入特定的Firefox配置文件夹。
问题是每个Firefox Profilefolder都有不同的生成名称
(例如:C:\Users\Username\AppData\Roaming\Mozilla\Firefox\Profiles\ab1c2def.default
)
由于我想让脚本在多台PC上工作,我无法对路径进行硬编码,所以我想能够阅读路径的最后一部分并将其用作变量,这样我才能将我的路径更改为所需的文件夹以删除并添加文件。
以下是我开始的代码:
REM turning echo off
@echo off
REM changing directory to \Profiles Folder, behind it is the variable Folder.
cd %appdata%\Mozilla\Firefox\Profiles
REM I wanna read the last Folder into a variable.
set userprofilefolder = Somehow read the folders behind \Profiles
REM now I wanna change my directory into that one folder.
cd %appdata%\Mozilla\Firefox\Profiles\%userprofilefolder%
REM Here I am deleting the old "prefs.js" file in the Folder.
del prefs.js
REM now I change my Folderpath to where my modified "prefs.js" file lays.
cd path\where\my\prefs.js\file\lies
REM now I copy my fresh prefs.js" file into my Folder.
copy "prefs.js" "%appdata%\Mozilla\Firefox\Profiles\%userprofilefolder%"
REM Here I exit my .bat file.
exit
那我该怎么做?
答案 0 :(得分:0)
REM Turn echo off.
@echo off
REM Change directory to Firefox folder, this is where the profiles.ini file exist.
cd /d "%appdata%\Mozilla\Firefox" || exit /b 1
REM Read profiles.ini and call :profiledir with the value of each path key found.
for /f "tokens=1* delims==" %%A in (profiles.ini) do (
if /i "%%~A" == "path" call :profiledir "%%~B"
)
exit /b
:profiledir
REM Set local environment. Any settings i.e cd will be temporary.
setlocal
REM Check if ".default" in path to continue.
echo "%~1"| find ".default" || exit /b 1
REM Change to the profile dir.
cd /d "%~1" || exit /b 1
REM Copy prefs.js to current dir.
echo copy /y "path\to\my\prefs.js" "prefs.js"
exit /b
名为profiles.ini
的文件包含配置文件文件夹的路径。
该文件采用ini格式,您可以找到每个路径键的路径值。
您可以拥有多个个人资料文件夹,因此我使用了find ".default"
仅在文件夹包含该字符串时才继续。
注意:
pushd
和popd
而不是cd
。操作说明
REM Change directory to Firefox folder, this is where the profiles.ini file exist.
cd /d "%appdata%\Mozilla\Firefox" || exit /b 1
这会更改当前目录。 ||
是右侧的运行命令
如果左侧命令失败。如果失败,将退出errorlevel 1。
注意:使用cd /?
和exit /?
获取语法帮助。
REM Read profiles.ini and call :profiledir with the value of each path key found.
for /f "tokens=1* delims==" %%A in (profiles.ini) do (
if /i "%%~A" == "path" call :profiledir "%%~B"
)
此for
循环读取profiles.ini文件。分隔符设置为=
ini文件用于从值中分隔键。令牌1
将成为
密钥放在%%A
中,而令牌*
将是存储在%%B
中的值。
如果密钥等于名为path
的密钥,则调用名为的标签
:profiledir
带有路径值的第一个参数,它应该是路径
到个人资料文件夹。
注意:使用for /?
和call /?
获取语法帮助。
:profiledir
这是被叫标签。对标签的调用可以传递参数
使得传递诸如路径之类的东西变得方便。参数
收到的格式为%1
,%2
... %9
。代号为%~1
删除外部双引号。被叫标签返回给主叫方
完成后。
REM Check if ".default" in path to continue.
echo "%~1"| find ".default" || exit /b 1
"%~1"
是引用的第一个参数。它与find
命令和if相呼应
找到.default
,然后它会继续。 |
被称为管道
来自echo
的stdout被传递给find
的标准输入。
注意:使用find /?
获取语法帮助。
REM Change to the profile dir.
cd /d "%~1" || exit /b 1
与主代码cd
相同,但它设置为本地,因此仅持续使用
被叫标签。
REM Copy prefs.js to current dir.
echo copy /y "path\to\my\prefs.js" "prefs.js"
/y
的{{1}}参数允许覆盖而无需确认
copy
已过时。
注意:使用del
获取语法帮助。
最后:删除copy /?
命令前面的echo
如果满意它显示复制命令正常。