nsis - 如何通过循环复制文件
nsis - How to copy files through loop
我将要复制的文件保存为如下.dat文件。
\Bin\a.exe
\Bin\b.dll
\Bin\c.dll
\Bin\d.dll
\Bin\e.dll
\Bin\f.dll
然后我想逐行读取.dat文件。
我按以下代码(.nsi)逐行阅读。
ClearErrors
FileOpen [=11=] "CopyFileList.dat" r
loop:
FileRead [=11=]
Strcmp "" done
StrCpy $varBinFileName
File /r "${TARGETDIR}$varBinFileName"
goto loop
done:
FileClose [=11=]
然后出现两个问题!!
1) 读取变量本身的名称,而不是变量$varBinFileName 的存储值。
所以,即使文件在那里,
找不到文件,因为它不是文件名。
2) 当读取一个.dat文件时,一个“||”被添加。
例如,读取第一行会产生以下结果:\Bin\a.exe||
我想得到删除“||”的结果复制文件时使用它。
请让我知道是否有更好的方法来逐行读取 .dat 文件并将其复制到循环中而不是我编写的代码。
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 [=11=] "$temp\nsistest.txt" w
FileWrite [=11=] "hello$\r$\n"
FileWrite [=11=] "world$\r$\n"
FileClose [=11=]
; Parse file
FileOpen [=11=] "$temp\nsistest.txt" r
loop:
FileRead [=11=]
StrCmp "" done
StrCpy "" -1 ; Copy last character
StrCmp '$\r' +2
StrCmp '$\n' +1 +3
StrCpy -1 ; Remove newline
Goto -4 ; ...and check the end again
DetailPrint line=
Goto loop
done:
FileClose [=11=]
我将要复制的文件保存为如下.dat文件。
\Bin\a.exe
\Bin\b.dll
\Bin\c.dll
\Bin\d.dll
\Bin\e.dll
\Bin\f.dll
然后我想逐行读取.dat文件。 我按以下代码(.nsi)逐行阅读。
ClearErrors
FileOpen [=11=] "CopyFileList.dat" r
loop:
FileRead [=11=]
Strcmp "" done
StrCpy $varBinFileName
File /r "${TARGETDIR}$varBinFileName"
goto loop
done:
FileClose [=11=]
然后出现两个问题!!
1) 读取变量本身的名称,而不是变量$varBinFileName 的存储值。
所以,即使文件在那里,
找不到文件,因为它不是文件名。
2) 当读取一个.dat文件时,一个“||”被添加。
例如,读取第一行会产生以下结果:\Bin\a.exe||
我想得到删除“||”的结果复制文件时使用它。
请让我知道是否有更好的方法来逐行读取 .dat 文件并将其复制到循环中而不是我编写的代码。
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 [=11=] "$temp\nsistest.txt" w
FileWrite [=11=] "hello$\r$\n"
FileWrite [=11=] "world$\r$\n"
FileClose [=11=]
; Parse file
FileOpen [=11=] "$temp\nsistest.txt" r
loop:
FileRead [=11=]
StrCmp "" done
StrCpy "" -1 ; Copy last character
StrCmp '$\r' +2
StrCmp '$\n' +1 +3
StrCpy -1 ; Remove newline
Goto -4 ; ...and check the end again
DetailPrint line=
Goto loop
done:
FileClose [=11=]