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

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

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

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

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

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

针对Setup Factory 7的备份还原方法,希望对后来安装包制作有些作用。. p; `6 s" ]+ ^9 {) ^7 `% a

% G. K+ D  `7 D9 R8 \7 m" c以下转自http://www.localsoft.tw/forum/viewthread.php?tid=2747
3 q  y, j2 _/ T" D$ U
) v0 I! I2 _/ R0 H- u  J[教學] Setup Factory 7 備份還原方法- [2 b  h. A. }" @/ m$ P
Setup Factory 7 可以設定在安裝時遇到要被覆蓋的檔案時自動將它備份成 .bak 的檔案並存放在與原始檔案相同的資料夾中。例如有下列三個檔案會被覆蓋:! [1 t  D7 x  q. y% s

1 v  B' ~$ k+ F( F5 Iabc.exe8 ]- S6 o1 ~3 c
123.txt, {1 `$ Z6 i3 j, V- E. k
\source\xyz.dll
: H2 X' m1 H9 p9 Z2 r
- k. Z0 f9 U+ C9 }" V安裝後會被備份成:& g' C7 m/ v: z$ k* k/ ?6 P

% s* Y% O9 l# |, Gabc.exe.bak8 u& T/ p! k1 k5 ^4 C+ L% d
123.txt.bak
- M9 S/ C' z6 Q2 u0 e4 H" N0 f- \\source\xyz.dll.bak, P$ _8 Y' U2 e, S% G% t# H
4 I' A) d0 l1 I9 @& H$ P
之前做中文化時,使用 Setup Factory 7 製作中文安裝程式,如果在其中加入移除中文化的功能時,會遇到需要將之前備份的檔案一個一個更改回原始檔名的問題。所以每個檔案必須設定一次變更名稱的程式碼,三個就要設定三行,萬一有數十個時就頭大了。4 K8 K% ?1 h; P+ p, j$ N
5 C. o+ o" q& ^1 P3 N, y$ f% l
最近發現 Setup Factory 7 提供了一個很好用的處理陣列的迴圈,可以利用來一次處理所有需要改回原檔名的 .bak 備份檔案(甚至可包含子資料夾下的檔案)。這個迴圈是:, Q, c* ?) ^6 q8 C& I8 I

( p! P" g  f. |" Q" E% |% F; p+ Y$ Z. R* W ' `* Y3 Q0 i4 o5 v
$ |; @0 [+ D3 @0 h6 q) d9 k: T: _
For index,value in _array Do) O$ i/ ?" G" m/ E# f8 a5 ]$ y
  .....
* {3 t! p& U5 {6 X0 s# c8 dEnd
( r4 [0 A( C  M3 D7 `! w; I! S# x- \; Z1 Z( A& [

: n% g# a5 K' e8 I1 c) ?
/ i( e% ~& w) l其中的 index 及 value 可以是隨便的自訂文字,如 i,v。index 是陣列中每個元素的索引;value 是陣列中每個元素的內容。_array 則要被處理的陣列 (一個用其他方法取得的變數陣列)。
& b# N( ]# ^/ D/ I) v: a
: ~) \/ ]) D- W7 i4 t5 s6 F; |範例:( v. C+ o  z; l: S7 A
% Q. [1 K, r& U; _' W' [3 ~
4 d3 z2 @5 }9 K+ u1 m3 M5 f
7 P$ V: r* e# y# Z7 c$ x) |2 F
bak_result = File.Find(SessionVar.Expand("%AppFolder%"), "*.bak", true, false, nil, nil);
, R/ z8 R# K# ?7 t  y9 z0 G! ^0 vfor i,v in bak_result do
8 R: ^* R) ]; a/ |% s, o& e/ ^- c    File.Rename(v, String.TrimRight(v, ".bak"));
  O# ]1 D) R7 d7 H: q- J' wend . {$ v* b$ D! [" x( A

0 `' y& K! y/ Z( k2 g, [. ^5 G% q6 u

3 @3 V: c4 V( K第一行,先用 File.Find 從安裝資料夾 %AppFolder% 中搜尋所有 .bak 的檔案(包含子資料夾),並將所有找到的檔案陣列存入 bak_result 這個變數。由於 %AppFolder% 是一個內建的變數,Setup Factory 7 中的所有內建變數必須使用 SessionVar.Expand() 將內建變數展開才能讀取內容。0 p; N' @  s0 s
第二行,利用這次說明的陣列處理迴圈來處理,它會一個一個取出存在 bak_result 中的變數。將索引存入 i;內容存入 v。9 q1 Q8 @' a: [4 c
第三行,利用 String.TrimRight 將每個檔案名稱後面的 .bak 字串刪掉,並利用 File.Rename 將變數中的檔案名稱重新命名為不含 .bak 字串的檔案名稱。由於我們只是要處理每個陣列元素的內容 v,用不到索引,所以索引 i 在這行程式中並未出現。
; R% j5 p) Y8 p$ R* @第四行,結束迴圈。
  T9 R" N5 Z  ]  J, e' h7 \' [- T
8 n2 X3 z6 \- d% l由於 File.Find 找到的 .bak 檔案,會包含他的路徑及檔案名稱,因此你只要設定讓 File.Find 同時去找子資料夾下的檔案,在後續更名的過程中它也會一併將子資料夾下的 .bak 檔案也回復成原來的檔案。
2 h9 k+ w2 k3 B" \8 `! A" I- G! N% ^& j$ B" P# L# k4 T1 ]
如此一來,不管你的移除對象有數十個或上百個以上的 .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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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