【发布时间】:2012-03-25 20:16:10
【问题描述】:
作为 NSIS 脚本生成器的一部分,我有一个文件名列表,这些文件名当前位于名为 files.txt 的文件中。内容示例如下...
c:\myfolder\assets\startup.xml
c:\myfolder\assets\begin.exe
c:\myfolder\assets\begin.swf
c:\myfolder\assets\resources\assets\text\help.pdf
c:\myfolder\assets\resources\assets\text\license.rtf
c:\myfolder\assets\resources\assets\swf\piano.swf
c:\myfolder\assets\resources\assets\swf\numbers.swf
c:\myfolder\assets\resources\section1\resource1\item1.jpg
c:\myfolder\assets\resources\section1\resource1\item2.jpg
c:\myfolder\assets\resources\section4\resource1\item7.jpg
c:\myfolder\assets\resources\section4\resource1\item8.jpg
我正在尝试使用批处理文件处理此文件列表,以便它们最终看起来像这样......
SetOutPath "$INSTDIR"
File "c:\myfolder\assets\startup.xml"
SetOutPath "$INSTDIR"
File "c:\myfolder\assets\begin.exe"
SetOutPath "$INSTDIR"
File "c:\myfolder\assets\begin.swf"
SetOutPath "$INSTDIR\resources\assets\text"
File "c:\myfolder\assets\resources\assets\text\help.pdf"
SetOutPath "$INSTDIR\resources\assets\text"
File "c:\myfolder\assets\resources\assets\text\license.rtf"
SetOutPath "$INSTDIR\resources\assets\swf"
File "c:\myfolder\assets\resources\assets\swf\piano.swf"
SetOutPath "$INSTDIR\resources\assets\swf"
File "c:\myfolder\assets\resources\assets\swf\numbers.swf"
SetOutPath "$INSTDIR\resources\section1\resource1"
File "c:\myfolder\assets\resources\section1\resource1\item1.jpg"
SetOutPath "$INSTDIR\resources\section1\resource1"
File "c:\myfolder\assets\resources\section1\resource1\item2.jpg"
SetOutPath "$INSTDIR\resources\section4\resource1"
File "c:\myfolder\assets\resources\section4\resource1\item7.jpg"
SetOutPath "$INSTDIR\resources\section4\resource1"
File "c:\myfolder\assets\resources\section4\resource1\item8.jpg"
我尝试了一些方法,但还没有真正找到解决方案。谁能指出我正确的方向?
更新
好的,从 Aacini 的帖子开始,我已经稍微修改了批处理文件,如下所示...
dir "c:\n\assets" /b /s > "c:\n\original.txt"
type "c:\n\original.txt" | findstr \. > "c:\n\filelist.txt"
@echo off
setlocal EnableDelayedExpansion
SET PATH=C:\n
set INSTDIR="c:\n\assets\"
( for /F "delims=" %%a in (filelist.txt) do (
set "filePath=%%~DPa"
set "outPath=!filePath:%INSTDIR%=!"
if defined outPath set "outPath=\!outPath:~0,-1!"
echo SetOutPath "$INSTDIR!outPath!"
echo File "%%a"
)
) > "c:\n\result.txt"
REM move /Y c:\result.txt files.txt
我主要使用引号进行了一些更改以允许在路径名称中使用空格,并且我还设置了路径以允许从 NSIS 调用时一切正常工作。我现在面临的问题是,而不是......
SetOutPath "$INSTDIR\assets"
File "c:\my folder\assets\startup.xml"
我明白了……
SetOutPath "$INSTDIR\c:\my folder\assets"
File "c:\my folder\assets\startup.xml"
我认为这是一个非常容易解决的问题,但我正在努力改变它!我做错了什么?
【问题讨论】:
标签: batch-file nsis