【发布时间】:2017-04-13 14:04:50
【问题描述】:
背景:
我正在尝试将 Firefox 配置文件从本地计算机迁移到用户的漫游配置文件目录。一些用户的个人资料已经位于他们的家庭驱动器中,但大多数用户没有。
我已经尝试使用 Mike Kaply 的 CCK 工具来执行此操作,但不幸的是,它没有将 Firefox 配置文件目录迁移到用户的漫游配置文件,而只是指向没有 Firefox 配置文件所在的漫游配置文件目录。
因此,为了解决这个问题,我决定创建一个批处理,它会在目录“home”下的每个用户目录中查找目录“FirefoxProfile”。如果此文件夹不存在,它将创建它(隐藏文件夹)。此外,该脚本将遍历每个本地配置文件,在每个 Firefox 配置文件文件夹中搜索最新的 places.sqlite 文件(Firefox 的书签文件),将其复制到用户主页下的 FirefoxProfile 文件夹,最后将文件 profiles.ini 复制到AppData\Roaming\Mozilla 下的 users Firefox 文件夹。
如果用户主目录下的 FirefoxProfile 文件夹确实存在,脚本将执行与该文件夹不存在相同的步骤,但不会创建文件夹 FirefoxProfile。
我编写的脚本没有按预期运行。我试图重写它(重新排列引号和括号,重新格式化代码),但它总是归结为以下问题: 该脚本删除 FOR 循环中的参数“/D”。从那里开始,脚本也无法正确识别“%%”变量,而是删除了前导“%”字符。
此外,FOR /F 循环有问题。 fly 3.txt 中的输出为:
DIR /S /B /O:-D testuser1.V2\AppData\Roaming\Mozilla\Firefox\Profiles\places.sqlite 主页\testuser1\FireFoxProfile\Default
但它应该回馈这样的东西:
testuser1.V2\AppData\Roaming\Mozilla\Firefox\Profiles\lh15n9tq.default\places.sqlite 主页\testuser1\FireFoxProfile\Default
我将非常感谢任何帮助。 提前致谢。
脚本:
setlocal enabledelayedexpansion
SET HomeProfile=""
SET WSProfile=""
SET FFProfile=""
pushd \\srv-xyz\users
cd home
FOR /D %%A in (*) DO (
SET "HomeProfile=%%A"
if not exist !HomeProfile!\FireFoxProfile (
echo does not exist >> C:\tmp\1.txt
echo !HomeProfile!\FireFoxProfile\Default >> C:\tmp\2.txt
cd profile_WS
FOR /D %%B in (!HomeProfile!.V2) DO (
SET "WSProfile=%%B"
FOR /F "usebackq delims=" %%C IN ('DIR !WSProfile!\AppData\Roaming\Mozilla\Firefox\Profiles\places.sqlite /S /B /O:-D') DO (
SET "FFProfile=%%C"
echo !FFProfile! home\!HomeProfile!\FireFoxProfile\Default >> C:\tmp\3.txt
echo C:\tmp\profiles.ini !WSProfile!\AppData\Roaming\Mozilla\Firefox >> C:\tmp\4.txt
))
) ELSE (
echo !HomeProfile!\FireFoxProfile\Default >> C:\tmp\5.txt
FOR /D %%B IN (!HomeProfile!.V2) DO (
SET "WSProfile=%%B"
FOR /F "usebackq delims=" %%C IN ('DIR !WSProfile!\AppData\Roaming\Mozilla\Firefox\Profiles\places.sqlite /S /B /O:-D') DO (
SET "FFProfile=%%C"
echo !FFProfile! home\!HomeProfile!\FireFoxProfile\Default >> C:\tmp\6.txt
echo C:\tmp\profiles.ini !WSProfile!\AppData\Roaming\Mozilla\Firefox >> C:\tmp\7.txt)
))
)
popd
PAUSE
脚本状态:
为了测试脚本,我替换了实际代码并让脚本将其输出写入文本文件。
问题:
对于每个用户,脚本都会失败,如下所示
V:\home>(
SET "HomeProfile=testuser1"
if not exist !HomeProfile!\FireFoxProfile (
echo does not exist 1>>C:\tmp\1.txt
echo !HomeProfile!\FireFoxProfile\Default 1>>C:\tmp\2.txt
cd profile_WS
FOR / %B in (!HomeProfile!.V2) DO (
SET "WSProfile=%B"
FOR /F "usebackq delims" %C IN ('DIR /S /B /O:-D !WSProfile!\AppData\Roaming\Mozilla\Firefox\Profiles\places.sqlite') DO (
SET "FFProfile=%C"
echo !FFProfile! home\!HomeProfile!\FireFoxProfile\Default 1>>C:\tmp\3.txt
echo C:\tmp\profiles.ini !WSProfile!\AppData\Roaming\Mozilla\Firefox 1>>C:\tmp\4.txt
)
)
) ELSE (
echo !HomeProfile!\FireFoxProfile\Default 1>>C:\tmp\5.txt
FOR / %B IN (!HomeProfile!.V2) DO (
SET "WSProfile=%B"
FOR /F "usebackq delims" %C IN ('DIR /S /B /O:-D !WSProfile!\AppData\Roaming\Mozilla\Firefox\Profiles\places.sqlite') DO (
SET "FFProfile=%C"
echo !FFProfile! home\!HomeProfile!\FireFoxProfile\Default 1>>C:\tmp\6.txt
echo C:\tmp\profiles.ini !WSProfile!\AppData\Roaming\Mozilla\Firefox 1>>C:\tmp\7.txt
)
)
)
)
V:\home>(
SET "WSProfile=testuser1.V2"
FOR /F "usebackq delims" %C IN ('DIR /S /B /O:-D !WSProfile!\AppData\Roaming\Mozilla\Firefox\Profiles\places.sqlite') DO (
SET "FFProfile=%C"
echo !FFProfile! home\!HomeProfile!\FireFoxProfile\Default 1>>C:\tmp\3.txt
echo C:\tmp\profiles.ini !WSProfile!\AppData\Roaming\Mozilla\Firefox 1>>C:\tmp\4.txt
)
)
V:\home>(
SET "FFProfile=DIR"
echo !FFProfile! home\!HomeProfile!\FireFoxProfile\Default 1>>C:\tmp\3.txt
echo C:\tmp\profiles.ini !WSProfile!\AppData\Roaming\Mozilla\Firefox 1>>C:\tmp\4.txt
)
引起我注意的地方是以下几行:
cd profile_WS
FOR / %B in (!HomeProfile!.V2) DO (
SET "WSProfile=%B"
【问题讨论】:
-
显然,
FOR / %B是个问题。您在控制台输出中看到了什么错误的输出? -
您是否知道每个用户可以拥有多个 Firefox 配置文件,并且这些配置文件几乎可以位于任何地方?仅仅因为最近修改了书签文件并不能表明用户最常使用的配置文件。 (我知道大多数人可能只是使用单个随机命名的 *.default 位置,但我不会称其为可靠假设).
-
你好@Lit,谢谢你的回答。标题“问题:”下的代码是脚本的确切输出,仅针对单个用户文件夹,在本例中为 testuser1。每个用户目录的输出都是相同的。
-
您好@Compo,感谢您的回答。我们的环境受到严格限制,用户无法在另一个位置创建另一个配置文件,这就是我确定他们使用标准 *.default 配置文件的原因。尽管如此,还是感谢您的意见。
-
如果阻止用户创建多个配置文件,那么递归检查最近修改的书签文件没有任何意义,他们将在
*.default路径下只有一个。您还知道他们的配置文件目录的实际路径写在已知位置的文件中吗?您可以从那里检索/解析它们。
标签: loops batch-file firefox cmd