2012-06-13 59 views
18

我似乎无法找到有关如何复制使用NSIS目录的信息吗?我知道有一个文件的命令,但没有任何命令复制目录。使用NSIS复制目录。

回答

22

的语法是相同的两个目录和文件,但您需要通过提供一个指定目录\结束。如果指定的参数是目录,则File命令将复制该目录。例如,你可以这样做:

SetOutPath "outputPath" 
File "myDirectory\" #note back slash at the end 

但是,只复制顶级目录。递归做到这一点,你必须/r开关

SetOutPath "outputPath" 
File /nonfatal /a /r "myDirectory\" #note back slash at the end 

其复制myDirectory(但不myDirectory文件夹本身)的内容。如果没有特定的目录,/nonfatal忽略没有错误。 /a也复制文件属性。 /x交换机用于排除文件。

否则,

SetOutPath "outputPath\myDirectory" 
File /nonfatal /a /r "myDirectory\" #note back slash at the end 

副本myDirectory所有内容,包括myDirectory文件夹outputPath

+1

谢谢!最后一个例子似乎没有工作,但...要创建文件夹,我必须使用 SetOutPath $ INSTDIR \ myDirectory 然后 文件/ a/r“myDirectory \” – werner

+0

@nawfal,非常感谢在最后强调'\'。这让我疯狂!我没有在NSIS文档中看到任何引用。 – Damian

+0

重要的是说,这将有副作用一样包上编译阶段安装程序可执行文件中的目录。 – Andry

4

我发现如何做到这一点,遗憾的麻烦。

提取物不能存在事先

CreateDirectory $Installdir\extracting 

SetOutPath $Installdir\extracting 

File Directory\* 
+2

'SetOutPath'已创建通过目录和子目录,因此调用CreateDirectory首先是没有必要的。 – Claudix

3

File指令提取从您的安装已经最终用户系统上存在的文件和CopyFiles复制文件和/或目录下的文件到一个目录(你可以用$ EXEDIR,如果你需要复制的文件从一台DVD在您的安装程序也位于...)