在 NSIS 中复制文件

Sil*_*bit 5 windows installation nsis

我正在使用以下命令复制文件。

设置输出路径后...

File "Documents\*"
Run Code Online (Sandbox Code Playgroud)

这个动作完美无缺。处理 Documents 目录中的文件没有问题,直到...

如果目录中有现有文件的副本(具有不同的名称),则无论名称如何,只会复制该文件的第一个实例。

我该如何制作它才能复制所有文件,而不管它们是否是其他文件的副本?

更正/更好的解释(也许)

对于造成的混乱,我深表歉意。请允许我尝试重述这个问题。使用 FILE 命令提取的文件是这里的问题。文件由原始文件和相同文件的副本(仅名称不同)组成。

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

当应用 File 命令时,为了将文件提取到当前输出路径,只提取文件的第一个实例(副本或原始...但不是两者)。再次,我很抱歉造成混乱,但这是我第一次不得不与 NSIS 合作。我需要提取所有文件。

Chr*_*gan 4

最简单的方法是将其放在您创建的不同目录中。然后,如果您需要担心重命名(正如评论员指出您的问题没有多大意义),您可以逐个文件地攻击它。

# 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
Run Code Online (Sandbox Code Playgroud)

(请注意,这是使用 LogicLib。)

不过,这并不是一种非常巧妙的方法,如果你能避免它,那就避免吧。