【问题标题】:Copy Files in NSIS在 NSIS 中复制文件
【发布时间】:2010-09-14 16:49:55
【问题描述】:

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

设置输出路径后...

File "Documents\*"

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

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

我怎样才能让它复制所有文件,无论它们是否是其他文件的副本?

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

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

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

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

【问题讨论】:

  • 你的问题没有任何意义,为了进一步混淆,NSIS File 指令从 yourinstaller.exe 中提取文件,但 NSIS 也有一个名为 CopyFiles 的命令,用于在最终用户系统上复制文件跨度>
  • 先生。安德斯,我添加了我认为更好的解释。你怎么看?
  • 我也不明白你的问题,除非你的意思是你想让 nsis 为你重命名现有文件的副本,而不是覆盖。 ex) 如果存在 MyDocument.txt 将其重命名为 MyDocument(1).txt 然后写入

标签: windows installation nsis


【解决方案1】:

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

# 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。)

不过,这并不是一种非常巧妙的做法,如果可以避免,那就去做吧。

【讨论】:

    【解决方案2】:

    我以为我明白你在追求什么,直到我开始阅读回复;我将按照我最初的解释进行:给定一个名为“Documents”的目录,其中包含一堆文件(它们被称为什么,它们的内容无关紧要),您需要一个将文件复制到一些文件中的安装程序输出目录。我已经为这个场景 here 创建了一个测试安装程序,它对我有用。我在你追求的东西中缺少什么?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      相关资源
      最近更新 更多