2010-09-14 86 views
3

我正在使用以下命令來複制文件。在NSIS中複製文件

設置輸出路徑後...

File "Documents\*" 

這個動作完美的作品。直到...

如果在目錄中存在一個現有文件(具有不同名稱)的副本,則只有該文件的第一個實例被複制,而不管名稱如何。

我該怎麼做才能複製所有文件,無論它們是否是其他文件的副本?

更正/更好的解釋(也許)

我對這個混淆抱歉。請允許我嘗試重述問題。通過使用FILE命令提取的文件是這裏的問題。這些文件由原始文件和相同文件的副本組成(僅使用不同的名稱)。

例如:MyDocument.txt和copyOfMyDocument.txt等..

當文件命令被施加,以便在文件被解壓到當前輸出路徑,只有文件的第一個實例是提取(無論是複製或原始的......但不是兩者)。再次,我很抱歉讓人困惑,但這是我第一次不得不使用NSIS。我需要提取所有文件。

+0

你的問題沒有任何意義,進一步混淆的東西,NSIS文件指令從yourinstaller.exe中提取文件,但NSIS也有一個命令稱爲CopyFiles,在最終用戶系統上覆制文件 – Anders 2010-09-16 15:25:36

+0

Anders先生,我補充說我認爲是一個更好的解釋。你怎麼看? – 2010-09-20 21:32:52

+0

我也不明白你的問題,除非你的意思是你希望nsis爲你重命名現有文件的副本,而不是重寫。例如)如果MyDocument.txt存在將其重命名爲MyDocument(1).txt,然後寫它 – 2010-09-24 17:18:50

回答

2

最簡單的方法是將它放在您創建的不同目錄中。然後,如果您需要擔心重命名(正如評論員注意到您的問題沒有多大意義),則可以逐個文件地對其進行攻擊。

# Extract the files to a directory which can't exist beforehand 
CreateDirectory $PLUGINSDIR\extracting 
SetOutPath $PLUGINSDIR\extracting 
File Documents\* 

# Now go through file by file 
FindFirst $0 $1 $OUTDIR\* 
${While} $1 != "" 
    ${If} ${FileExists} $DOCUMENTS\$1 
     # This still isn't infallible, of course. 
     Rename $DOCUMENTS\$1 $DOCUMENTS\$1.local-backup 
    ${EndIf} 
    Rename $OUTDIR\$1 $DOCUMENTS\$1 
    FindNext $0 $1 
${Loop} 
FindClose $0 
SetOutPath $INSTDIR # Or somewhere else 
RMDir $PLUGINSDIR\extracting 

(請注意,這是使用LogicLib。)

這不成了,雖然這樣做的一個非常簡潔的方式,如果你能避免它,這樣做。

1

我以爲我明白你在做什麼之後,直到我開始閱讀回覆;我會按照我的初始解釋去做:給一個名爲「Documents」的目錄,裏面有一堆文件(他們叫什麼,他們的內容應該不重要),你需要一個安裝程序將文件複製到一些輸出目錄。我爲這個場景創建了一個測試安裝程序here,它適用於我。你在追求什麼?