【问题标题】:nsis - How to copy files through loopnsis - 如何通过循环复制文件
【发布时间】:2018-10-03 08:05:27
【问题描述】:

我将要复制的文件保存到 .dat 文件中,如下所示。

\Bin\a.exe
\Bin\b.dll
\Bin\c.dll
\Bin\d.dll
\Bin\e.dll
\Bin\f.dll

然后我想逐行读取 .dat 文件。 我按如下代码(.nsi)逐行阅读。

  ClearErrors
  FileOpen $0 "CopyFileList.dat" r                    

  loop:

  FileRead $0 $1                          
  Strcmp $1 "" done
  StrCpy $varBinFileName $1
  File /r "${TARGETDIR}\$varBinFileName"             
  goto loop

  done:

  FileClose $0         

然后出现两个问题!!

1)读取变量本身的名称,而不是变量$varBinFileName的存储值。
所以,即使文件在那里, 找不到该文件,因为它不是文件名。

2) 读取 .dat 文件时,“||”被添加。
例如,读取第一行会产生以下结果:\Bin\a.exe||
我想得到删除“||”的结果复制文件时使用它。


请让我知道是否有更好的方法来逐行读取 .dat 文件并将其复制到循环而不是我编写的代码。

【问题讨论】:

  • 您是在说从安装程序中复制文件还是提取文件?

标签: installation nsis file-read file-copying line-by-line


【解决方案1】:

1)

File 指令不能这样工作,它不接受变量,因为文件名是指您正在编译的机器上的文件。该文件被压缩并存储在 setup .exe 中。使用CopyFiles 指令复制已经在最终用户系统上的文件。

要有条件地提取某些内容,您需要编写如下内容:

!include LogicLib.nsh
Section
SetOutPath $InstDir
${If} $myvar == "something.ext"
  File "something.ext"
${Else}
  File "somethingelse.ext"
${EndIf}
SectionEnd

2)

FileRead 包含换行符(如果有),您必须删除它们:

; Write example file
FileOpen $0 "$temp\nsistest.txt" w
FileWrite $0 "hello$\r$\n"
FileWrite $0 "world$\r$\n"
FileClose $0

; Parse file
FileOpen $0 "$temp\nsistest.txt" r
loop:
    FileRead $0 $1
    StrCmp $1 "" done
        StrCpy $2 $1 "" -1 ; Copy last character
        StrCmp $2 '$\r' +2
        StrCmp $2 '$\n' +1 +3
        StrCpy $1 $1 -1 ; Remove newline
        Goto -4 ; ...and check the end again
    DetailPrint line=$1
    Goto loop
done:
FileClose $0

【讨论】:

  • 这是通过硬编码输入要安装的二进制文件的唯一方法吗?
  • 您可以使用!system 来执行一个批处理文件,该批处理文件会生成一个带有NSIS 指令的文本文件,然后您可以使用!include。见stackoverflow.com/a/49866848/3501等。
  • 我参考该链接创建了一个批处理文件。我想从安装部分运行一个批处理文件,但是当我将该代码放入部分时出现错误。 (Error: command Section not valid in Section ) 是不是不能在section或者functions中执行的代码?
  • 你不能把一个部分放在一个部分中。不要使用我链接到的确切文件,只使用写入 echo File ... 的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多