2016-04-05 18 views
1

皆さん。私はいくつかの "parentdir"ファイルを私のインストーラに取り込もうとしています。事はある:私はこのように、すべてのファイルとフォルダが含まれるように/ Rパラメータを使用します。このコマンドNSIS - どのように再帰的にソースフォルダとサブフォルダからのすべてのファイルを含めるには?

File /r "parentdir\*.*" 

すべてのファイルとサブフォルダが含まれます。

すべてのサブフォルダ(例)からFILES ONLYをoutディレクトリに追加する可能性はありますか?

私は何を持っていることは次のとおりです。

<dir>parentdir 
    file1.txt 
    file2.txt 
    <dir> directory1 
     file3.txt 
     file4.txt 
    <dir> directory2 
     file5.txt 
     file6.txt 
     <dir> directory3 
      file6.txt 

私は私のOUTディレクトリに取得したいことは次のとおりです。

SetOutPath "$INSTDIR\parentdir" 
File "parentdir\directory1\*.*" 
File "parentdir\directory2\*.*" 
File "parentdir\directory2\directory3\*.*" 

<dir>parentdir 
    file1.txt 
    file2.txt 
    file3.txt 
    file4.txt 
    file5.txt 
    file6.txt 
    file6.txt 

私はすでに、このようにやってみました

そして私は自分が望むものを手に入れました。 BUT

サブフォルダの名前を使用しないでください。スクリプトがすべてのサブフォルダの正確な名前を知らない場合(新しいサブフォルダが追加される場合)に必要です。

インストーラを柔軟にすることができますか?

ありがとうございました!

答えて

1

ディスクを検索し、File命令を.nshファイルに書き込むバッチファイル(または他のプログラム)を作成できます。あなたの.nsiは最初.nshを生成し、外部アプリケーションを実行するために!systemを使用し、!includeてしまう:

Section 
SetOutPath "$INSTDIR\parentdir" 
!tempfile filelist 
!system '"generatefilelist.bat" ".\parentdir" "${filelist}"' 
!include "${filelist}" 
!delfile "${filelist}" 
SectionEnd 

を...とバッチファイルは次のようになります。

@echo off 
FOR /R "%~1" %%A IN (*.txt) DO (
    >> "%~2" echo.File "%%~A" 
) 

をパターンが単純なので、バッチファイルを別途用意する必要がない場合は、直接cmd.exeを使用することができます。

Section 
SetOutPath "$INSTDIR\parentdir" 
!tempfile filelist 
!system 'FOR /R ".\parentdir" %A IN (*.txt) DO @(>> "${filelist}" echo.File "%~A")' 
!include "${filelist}" 
!delfile "${filelist}" 
SectionEnd 
+0

うわー、それはうまく動作します! 私はメインコードとは別にこれを試しました。そしてそれは素晴らしいようです。 私はそれを私のメインスクリプトに適用しようとします。 面白いことに、私はすでにメインコードの別の問題を解決するためにこの "方法"を使用しています。今、私のスクリプトは非常に複雑に見える、私はあなたのソリューションを正しく適用する方法を知らない、私はそれを試してみます。 ありがとう、そんなに! – lizmars

関連する問題