Как часть сборщика сценариев 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"
Я попробовал несколько вещей, но не смог найти решение. Кто-нибудь может указать мне правильное направление?
UPDATE
Хорошо, поэтому, исходя из поста Аасини, я слегка изменил командный файл, как показано ниже ...
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"
Я представляю, что это действительно легко исправить, но я дергаю себя за волосы, пытаясь их изменить! Что я делаю не так?