设为首页收藏本站官方微博

其他 [教學] Setup Factory 7 備份還原方法

[复制链接]
查看: 2866|回复: 0
打印 上一主题 下一主题

[其他] [教學] Setup Factory 7 備份還原方法

头像被屏蔽
跳转到指定楼层
楼主
发表于 2009-8-29 16:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

针对Setup Factory 7的备份还原方法,希望对后来安装包制作有些作用。& `. _% S6 \' {

3 L7 v' d9 T& c; H以下转自http://www.localsoft.tw/forum/viewthread.php?tid=2747
* o( g- r6 U, t0 L, M& q( s2 Z4 ?. A
[教學] Setup Factory 7 備份還原方法) j# e, X/ \. e! Q( W; q
Setup Factory 7 可以設定在安裝時遇到要被覆蓋的檔案時自動將它備份成 .bak 的檔案並存放在與原始檔案相同的資料夾中。例如有下列三個檔案會被覆蓋:0 a! F! ^8 c% E/ N6 l* v3 f
9 k4 b' x: B1 j
abc.exe. X. a$ n1 x' J$ b
123.txt
( l* |0 @- Z  i/ B& Y\source\xyz.dll
) j0 O* Z' l9 D3 |" p- }4 z% Q6 u
安裝後會被備份成:1 A: ~" j* i7 W$ w5 j2 }
( h  }& m8 x" y" G, ^& g, J
abc.exe.bak
) |/ I" S2 A0 O3 B9 E/ a123.txt.bak, ]# I7 J2 D2 t1 m5 p
\source\xyz.dll.bak% \/ K  h2 `: s  u* U
+ t' q) w, ]6 h) c/ t3 D" x
之前做中文化時,使用 Setup Factory 7 製作中文安裝程式,如果在其中加入移除中文化的功能時,會遇到需要將之前備份的檔案一個一個更改回原始檔名的問題。所以每個檔案必須設定一次變更名稱的程式碼,三個就要設定三行,萬一有數十個時就頭大了。
$ R" M" c6 i3 A; u' P! j# ~# [* ~% D4 |3 M- y& V/ `' h
最近發現 Setup Factory 7 提供了一個很好用的處理陣列的迴圈,可以利用來一次處理所有需要改回原檔名的 .bak 備份檔案(甚至可包含子資料夾下的檔案)。這個迴圈是:* A% b$ D9 e9 O$ I  p. K& F4 {7 o
+ ]! y. P" {5 b) k  d5 o1 _2 u/ q
* z$ [' k9 y% m
: c* q5 S9 n" {& S( g. N
For index,value in _array Do9 ^& [* B! Q# y+ u: @+ m3 A+ F6 Y
  .....+ {( x; {$ g2 L  K: `. z" }
End
" w# o% ~; x; ]. T: ]0 K  O" a% c. S7 x, ?) `; W3 `

2 p. L2 V4 s/ \6 z
9 u  u* b! z% [+ e其中的 index 及 value 可以是隨便的自訂文字,如 i,v。index 是陣列中每個元素的索引;value 是陣列中每個元素的內容。_array 則要被處理的陣列 (一個用其他方法取得的變數陣列)。
7 @/ M6 f* Y+ m- v# q/ x! B# P* `* y) K" G
範例:$ y1 s# A; P) p, |; p

( y6 x, n4 X: t* G: r - H% k& O% }- V

, o- h$ Z) X: s. P6 F4 Bbak_result = File.Find(SessionVar.Expand("%AppFolder%"), "*.bak", true, false, nil, nil);8 T0 A! T, E, A  B- ]8 w
for i,v in bak_result do
+ o( ]& ~. n: F- E    File.Rename(v, String.TrimRight(v, ".bak"));) u3 t6 K, M! U/ S' |
end
0 z% e0 B& e1 X; D0 @4 r+ W: Q8 i
5 K7 {% d; V7 d8 t
. j( T, j) u% g: ^& l' }7 w( L1 _& K: ]+ J1 T3 j
第一行,先用 File.Find 從安裝資料夾 %AppFolder% 中搜尋所有 .bak 的檔案(包含子資料夾),並將所有找到的檔案陣列存入 bak_result 這個變數。由於 %AppFolder% 是一個內建的變數,Setup Factory 7 中的所有內建變數必須使用 SessionVar.Expand() 將內建變數展開才能讀取內容。! [- R! X0 \4 X4 ~' T
第二行,利用這次說明的陣列處理迴圈來處理,它會一個一個取出存在 bak_result 中的變數。將索引存入 i;內容存入 v。
0 ?# T% U+ Y* w8 S' ~第三行,利用 String.TrimRight 將每個檔案名稱後面的 .bak 字串刪掉,並利用 File.Rename 將變數中的檔案名稱重新命名為不含 .bak 字串的檔案名稱。由於我們只是要處理每個陣列元素的內容 v,用不到索引,所以索引 i 在這行程式中並未出現。
. V& r  _$ g% `0 q/ I; x* x第四行,結束迴圈。
. h/ K2 \! Y! k6 f% X+ J8 D& p- U& T8 s, n
由於 File.Find 找到的 .bak 檔案,會包含他的路徑及檔案名稱,因此你只要設定讓 File.Find 同時去找子資料夾下的檔案,在後續更名的過程中它也會一併將子資料夾下的 .bak 檔案也回復成原來的檔案。% l. P/ g, ]* P8 J+ I) X
, A7 E3 z1 Q4 _* |' l& }% h
如此一來,不管你的移除對象有數十個或上百個以上的 .bak,只要上面那四行程式碼,一次全可搞定。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表