背景:Windows批處理 - 嵌套循環 - Firefox的配置文件遷移
我試圖從本地機器上的Firefox配置遷移到用戶的漫遊配置文件目錄。一些用戶已經在他們的家庭驅動器中擁有該配置文件,但大多數用戶沒有。
我已經試圖用Mike Kaply的CCK工具做這件事,但不幸的是,它不會將Firefox配置文件目錄遷移到用戶的漫遊配置文件,而只是指向沒有配置Firefox配置文件的漫遊配置文件目錄。
因此,爲了解決這個問題,我決定創建一個批處理,該目錄在目錄「home」目錄下的每個用戶目錄下查找目錄「FirefoxProfile」。如果這個文件夾不存在,它會創建它(隱藏文件夾)。此外,該腳本將遍歷每個本地配置文件,在每個Firefox配置文件文件夾中搜索最新的places.sqlite文件(Firefox的書籤文件),將其複製到家庭中的用戶FirefoxProfile文件夾,最後將文件profiles.ini複製到用戶在AppData \ Roaming \ Mozilla下的Firefox文件夾。
如果用戶主目錄下的文件夾FirefoxProfile確實存在,則腳本將執行與文件夾不存在相同的步驟,但不會創建文件夾FirefoxProfile。
我寫的腳本沒有按預期運行。我試圖重寫它(重新排列引號和括號,重新格式化代碼),但總是歸結爲以下問題: 該腳本刪除FOR循環中的參數「/ D」。此外,腳本無法正確識別「%%」變量,而是刪除前導的「%」字符。
此外FOR/F循環出現問題。在flie 3.txt的輸出是:
DIR/S/B/O:-D testuser1.V2 \應用程序數據\漫遊\ Mozilla的\火狐\概況\ places.sqlite 家\ testuser1 \ FireFoxProfile \默認
但它應該給回是這樣的:
testuser1.V2 \應用程序數據\漫遊\ Mozilla的\火狐\ Profiles文件\ lh15n9tq.default \ places.sqlite 家\ testuser1 \ FireFoxProfile \默認
我非常感謝任何幫助。 在此先感謝。
腳本:
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'是一個問題。你在控制檯輸出中看到哪裏產生了錯誤的輸出? – lit
您是否知道每個用戶都可以擁有多個Firefox配置文件,並且這些配置文件幾乎可以放在任何位置?僅僅因爲最近修改了書籤文件並不能說明用戶最常用的配置文件。 _(我知道大多數人可能只是使用一個隨機命名的* .default位置,但我不會稱這是一個強有力的假設)。 – Compo
Hello @Lit,謝謝你的回答。 Titel下的代碼「The Problem:」是腳本的精確輸出,僅用於單個用戶文件夾,在本例中爲testuser1。 每個用戶目錄的輸出都相同。 – BSL