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

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

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

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

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

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

针对Setup Factory 7的备份还原方法,希望对后来安装包制作有些作用。) U( a# c7 ]( N& @2 R) Z* u1 e
* j1 Z" F# f; D2 {: V  N
以下转自http://www.localsoft.tw/forum/viewthread.php?tid=2747
* N' _3 `$ o- {- ~
! O4 q. f6 f0 i) u; `$ P: S/ H3 c[教學] Setup Factory 7 備份還原方法3 O6 b) f0 g4 W/ ^) ~/ q" }8 W0 p9 q
Setup Factory 7 可以設定在安裝時遇到要被覆蓋的檔案時自動將它備份成 .bak 的檔案並存放在與原始檔案相同的資料夾中。例如有下列三個檔案會被覆蓋:- Y' m' T: I( p  _+ @

2 `/ P9 S" c; y- r* U4 b( \8 Iabc.exe
* [) A- Q' [& d7 m123.txt# b8 q; u3 f1 z. }& `' ?
\source\xyz.dll
7 M- ^# q+ l6 m9 l  D2 L, S- y, Z& e
安裝後會被備份成:$ M& o( n* w% u- n

  U9 G6 x# J- t3 B& L; gabc.exe.bak9 T, O+ z0 J$ S: M+ n' y. M3 I2 R
123.txt.bak8 m: X2 o# X. S% a/ X: A
\source\xyz.dll.bak8 h2 N5 x3 u6 w) Q8 ^
( e: `: b5 `6 C+ r" Q
之前做中文化時,使用 Setup Factory 7 製作中文安裝程式,如果在其中加入移除中文化的功能時,會遇到需要將之前備份的檔案一個一個更改回原始檔名的問題。所以每個檔案必須設定一次變更名稱的程式碼,三個就要設定三行,萬一有數十個時就頭大了。
7 ?$ Z. d+ Z. }" s! h5 _/ @9 p0 R" e1 {4 @6 X' Z$ g: ]& J( M9 j
最近發現 Setup Factory 7 提供了一個很好用的處理陣列的迴圈,可以利用來一次處理所有需要改回原檔名的 .bak 備份檔案(甚至可包含子資料夾下的檔案)。這個迴圈是:
3 L; f; ?3 A# {& X0 l8 ?; h# A' `; J- A
- }8 Z3 B5 k* X, j: H  o+ I
( M; K9 L' ?7 f2 O2 s5 z
For index,value in _array Do
* \* t# I0 j9 \/ q2 @  .....
1 y; D3 u- h& o0 REnd : V- }. f& e0 r5 X3 B+ B

8 {, A, r6 c, l1 y3 a5 ^6 m" m5 }& `
0 ]: h" `) c* ?7 |2 r4 y# }6 F$ v: l7 ~- U" b2 h
其中的 index 及 value 可以是隨便的自訂文字,如 i,v。index 是陣列中每個元素的索引;value 是陣列中每個元素的內容。_array 則要被處理的陣列 (一個用其他方法取得的變數陣列)。. N& ~6 }& X0 v, ?* }) M

. [8 o3 h$ ]5 \. A3 U2 o' u/ |2 M範例:/ Y/ U, `% ]! N* s1 K6 E

: J* Y1 O. j% \. ?- k5 O
# r  T  s6 J8 I8 j! }1 w, S: B" r8 A( \* J* m
bak_result = File.Find(SessionVar.Expand("%AppFolder%"), "*.bak", true, false, nil, nil);
6 B& P5 P* t$ c; X$ H' Pfor i,v in bak_result do1 s( {3 k& ]4 q. j1 X
    File.Rename(v, String.TrimRight(v, ".bak"));
, j( N7 H" J: G7 Z$ Yend $ J( M! ?4 s, l) w% w5 k* D8 j

; ^3 i3 _0 l( G& K
2 @; A6 H: u6 Q4 A) i# u/ x; B
$ V; h* H8 k- s$ D- F第一行,先用 File.Find 從安裝資料夾 %AppFolder% 中搜尋所有 .bak 的檔案(包含子資料夾),並將所有找到的檔案陣列存入 bak_result 這個變數。由於 %AppFolder% 是一個內建的變數,Setup Factory 7 中的所有內建變數必須使用 SessionVar.Expand() 將內建變數展開才能讀取內容。
' n+ s. V# E7 W4 z$ X第二行,利用這次說明的陣列處理迴圈來處理,它會一個一個取出存在 bak_result 中的變數。將索引存入 i;內容存入 v。  U9 Y/ B; r- D9 ^
第三行,利用 String.TrimRight 將每個檔案名稱後面的 .bak 字串刪掉,並利用 File.Rename 將變數中的檔案名稱重新命名為不含 .bak 字串的檔案名稱。由於我們只是要處理每個陣列元素的內容 v,用不到索引,所以索引 i 在這行程式中並未出現。
/ i/ S# B! Q  v, c6 K第四行,結束迴圈。
# O) F8 @; c; |! g1 G
% j$ ~* a( E# e# K# T由於 File.Find 找到的 .bak 檔案,會包含他的路徑及檔案名稱,因此你只要設定讓 File.Find 同時去找子資料夾下的檔案,在後續更名的過程中它也會一併將子資料夾下的 .bak 檔案也回復成原來的檔案。
, F' z3 t8 O5 S. O2 |  u! ]3 e- A5 ]! L6 z% T4 I6 G
如此一來,不管你的移除對象有數十個或上百個以上的 .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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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