1

現在、以下に示すように、$INSTDIR 内のすべてのテキスト ファイルを検索するチェックを行っています。

ただし、追加の .txt ファイルを含む $INSTDIR\mySub などのサブディレクトリが存在する可能性があります。同様のループ構造を維持しながら、すべてのサブディレクトリも検索する方法はありますか?

FindFirst $R0 $R1 "$INSTDIR\*.txt"
IfErrors ExitInstaller 0
LoopIt:
  Messagebox MB_OK "Do some processing on $R1"
  FindNext $R0 $R1
  IfErrors 0 LoopIt
4

2 に答える 2

2
Function ProcessTextFiles
Exch $0
Push $1
Push $2
FindFirst $1 $2 "$0\*.txt"
loop:
    IfErrors end
    DetailPrint 'Found "$0\$2"'
    FindNext $1 $2
    goto loop
end:
FindClose $1
FindFirst $1 $2 "$0\*.*"
dirloop:
    IfErrors dirend 
    IfFileExists "$0\$2\*.*" 0 dirnext
    StrCmp $2 "." dirnext
    StrCmp $2 ".." dirnext
    Push "$0\$2"
    call ${__FUNCTION__}
dirnext:
    FindNext $1 $2
    goto dirloop
dirend:
FindClose $1
Pop $2
Pop $1
Pop $0
FunctionEnd

section
push "$InstDir"
call ProcessTextFiles
sectionend
于 2011-10-25T13:45:43.107 に答える
1

代わりに関数を使用してみてくださいLocate-それははるかに良い解決策になる可能性があります. サブディレクトリあり (またはなし) の検索、マスクの定義などのオプションを記述できます。ドキュメントと例については、 http://nsis.sourceforge.net/Locateを参照してください。

于 2011-10-24T18:48:36.073 に答える