數碼中文坊

 取回密碼
 我要註冊
檢視: 13290|回覆: 1

[教學] Setup Factory 備份檔還原方法

  [複製連結]
發表於 2007-7-6 17:58:44 | 顯示全部樓層 |閱讀模式

馬上註冊,結交更多好友,享用更多功能,讓你輕鬆瀏覽論壇。

你需要 登入 才可以下載或檢視,沒有帳號?我要註冊

x
Setup Factory 7 可以設定在安裝時遇到要被覆蓋的檔案時自動將它備份成 .bak 的檔案並存放在與原始檔案相同的資料夾中。例如有下列三個檔案會被覆蓋:

abc.exe
123.txt
\source\xyz.dll

安裝後會被備份成:

abc.exe.bak
123.txt.bak
\source\xyz.dll.bak

之前做中文化時,使用 Setup Factory 7 製作中文安裝程式,如果在其中加入移除中文化的功能時,會遇到需要將之前備份的檔案一個一個更改回原始檔名的問題。所以每個檔案必須設定一次變更名稱的程式碼,三個就要設定三行,萬一有數十個時就頭大了。

最近發現 Setup Factory 7 提供了一個很好用的處理陣列的迴圈,可以利用來一次處理所有需要改回原檔名的 .bak 備份檔案(甚至可包含子資料夾下的檔案)。這個迴圈是:


For index,value in _array Do
  .....
End


其中的 index 及 value 可以是隨便的自訂文字,如 i,v。index 是陣列中每個元素的索引;value 是陣列中每個元素的內容。_array 則是要被處理的陣列 (一個用其他方法取得的變數陣列)。

範例:


bak_result = File.Find(SessionVar.Expand("%AppFolder%"), "*.bak", true, false, nil, nil);
for i,v in bak_result do
    File.Rename(v, String.TrimRight(v, ".bak"));
end


第一行,先用 File.Find 從安裝資料夾 %AppFolder% 中搜尋所有 .bak 的檔案(包含子資料夾),並將所有找到的檔案陣列存入 bak_result 這個變數。由於 %AppFolder% 是一個內建的變數,Setup Factory 7 中的所有內建變數必須使用 SessionVar.Expand() 將內建變數展開才能讀取內容。
第二行,利用這次說明的陣列處理迴圈來處理,它會一個一個取出存在 bak_result 中的變數。將索引存入 i;內容存入 v。
第三行,利用 String.TrimRight 將每個檔案名稱後面的 .bak 字串刪掉,並利用 File.Rename 將變數中的檔案名稱重新命名為不含 .bak 字串的檔案名稱。由於我們只是要處理每個陣列元素的內容 v,用不到索引,所以索引 i 在這行程式中並未出現。
第四行,結束迴圈。

由於 File.Find 找到的 .bak 檔案,會包含他的路徑及檔案名稱,因此你只要設定讓 File.Find 同時去找子資料夾下的檔案,在後續更名的過程中它也會一併將子資料夾下的 .bak 檔案也回復成原來的檔案。

如此一來,不管你的移除對象有數十個或上百個以上的 .bak,只要上面那四行程式碼,一次全可搞定。
 樓主| 發表於 2011-4-12 23:49:15 | 顯示全部樓層
前面說的方法是 Setup Factory 7.x 及 8.x 的用法,9.x 後語法有些變動,如下:

舊語法:

for i, v in bak_result Do

新語法

for i, v in pairs(bak_result) Do
你需要登入後才可以回覆 登入 | 我要註冊

本版積分規則

Archiver|禁閉室|手機版|數碼中文坊

GMT+8, 2024-4-19 11:11 AM

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回覆 返回頂端 返回清單