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

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

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

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

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

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

针对Setup Factory 7的备份还原方法,希望对后来安装包制作有些作用。7 F$ a: K, R! T+ C( y6 C

4 V8 s. @3 M* W( A9 }5 b; n4 h以下转自http://www.localsoft.tw/forum/viewthread.php?tid=2747( _$ R5 \& \, e  b; Q
' y+ ]* R8 E* Y4 f5 U  z% }
[教學] Setup Factory 7 備份還原方法
- f2 j6 M8 V7 _5 tSetup Factory 7 可以設定在安裝時遇到要被覆蓋的檔案時自動將它備份成 .bak 的檔案並存放在與原始檔案相同的資料夾中。例如有下列三個檔案會被覆蓋:+ j# x) S. O- M; s  V4 ]
* r( ~8 p2 t' L+ v
abc.exe! o7 x- w8 N/ m% h, |
123.txt
% B# p8 |- {0 G  M3 c4 `\source\xyz.dll: }8 T* [1 D. v) \0 ^6 `$ z

( j$ K' l4 M! T9 Y1 r& G安裝後會被備份成:& x+ O) \7 ]  j6 Z
8 d* A7 J& p- f0 y3 ]
abc.exe.bak2 d' }) q; @  B; M2 Z4 h/ R
123.txt.bak0 g! I: ?' b; K; q" n
\source\xyz.dll.bak
* C2 i8 b- {7 s4 t/ C) {5 O/ Q0 m- t$ h4 ?  j: |
之前做中文化時,使用 Setup Factory 7 製作中文安裝程式,如果在其中加入移除中文化的功能時,會遇到需要將之前備份的檔案一個一個更改回原始檔名的問題。所以每個檔案必須設定一次變更名稱的程式碼,三個就要設定三行,萬一有數十個時就頭大了。
6 q; a0 Y9 {) E+ L; X( ~: Y: _6 ~* R+ h, R$ k- c
最近發現 Setup Factory 7 提供了一個很好用的處理陣列的迴圈,可以利用來一次處理所有需要改回原檔名的 .bak 備份檔案(甚至可包含子資料夾下的檔案)。這個迴圈是:
+ U- ~- m+ V6 P
2 V1 m' _! ?% _( ` 6 w: r' Q0 h: m7 \( H  v

: s. h7 B& n/ l. k: \' [For index,value in _array Do
7 {. @6 F  z: n1 r4 w$ O  .....9 C4 p) y4 S/ k& W+ E
End 5 H* S/ E* g( \8 _; g
3 p8 i0 y" h4 V0 y% S6 ~. f6 {

) _7 [' q; S6 B) j' ~. b; V  g4 }. ?2 w+ i9 k/ y$ L
其中的 index 及 value 可以是隨便的自訂文字,如 i,v。index 是陣列中每個元素的索引;value 是陣列中每個元素的內容。_array 則要被處理的陣列 (一個用其他方法取得的變數陣列)。; y5 X; r  D2 r4 Z3 v

  E- J' I: R1 L% t, G$ V範例:
  c% B' W8 M# Q7 r# y7 ~( ?3 r$ p# V  b! u* t, \5 F. A/ r- J

! u/ H3 K6 K* e" e+ n8 U! L% ~/ n! S: B- U# Y" m& |
bak_result = File.Find(SessionVar.Expand("%AppFolder%"), "*.bak", true, false, nil, nil);5 P* Y/ ]" o  ?$ D' I# s3 w
for i,v in bak_result do. `6 j8 W; M0 H' y' A% w
    File.Rename(v, String.TrimRight(v, ".bak"));% A8 i  s8 b( Z' H4 n8 @9 \% v
end
( j, @8 X$ ~8 D) O, J  X! }! N/ l( o' p  B& T+ \: e: \2 U

- s. @& [' D( w+ O9 ?7 g: J. |- c& }* Z+ H3 o& v
第一行,先用 File.Find 從安裝資料夾 %AppFolder% 中搜尋所有 .bak 的檔案(包含子資料夾),並將所有找到的檔案陣列存入 bak_result 這個變數。由於 %AppFolder% 是一個內建的變數,Setup Factory 7 中的所有內建變數必須使用 SessionVar.Expand() 將內建變數展開才能讀取內容。
' }- H* s' V7 i5 d: z' D, f第二行,利用這次說明的陣列處理迴圈來處理,它會一個一個取出存在 bak_result 中的變數。將索引存入 i;內容存入 v。
0 ]7 O2 `2 F% N1 e第三行,利用 String.TrimRight 將每個檔案名稱後面的 .bak 字串刪掉,並利用 File.Rename 將變數中的檔案名稱重新命名為不含 .bak 字串的檔案名稱。由於我們只是要處理每個陣列元素的內容 v,用不到索引,所以索引 i 在這行程式中並未出現。
0 U9 U8 c$ E3 V0 I; @2 U; I第四行,結束迴圈。3 O% _" [1 r6 z) g5 n
0 N7 q2 v# O3 a; u; E
由於 File.Find 找到的 .bak 檔案,會包含他的路徑及檔案名稱,因此你只要設定讓 File.Find 同時去找子資料夾下的檔案,在後續更名的過程中它也會一併將子資料夾下的 .bak 檔案也回復成原來的檔案。
2 t, u. j" s* n
6 d3 l: M1 d8 w3 b; V如此一來,不管你的移除對象有數十個或上百個以上的 .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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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