2017-02-09 4 views
0

у меня есть проблемы с рекурсивным поиском, но сначала некоторые ключевые данные:Рекурсивного поиск SQL файлов в каталогах (NSIS)

  • У меня есть несколько каталогов, заполненных SQL-файлы, которые я хочу, чтобы скопировать $ TEMP
  • каталоги я хочу читать выглядеть как этот v2.1.0.0
  • в данный момент, каталоги v2.5.0.0 на v2.7.0.3 должны быть считаны
  • папки не должны быть " следующий ", поэтому v2.5.0.3 может следовать v2.5.0.0
  • Я использую LogicLib
  • Я новичок в этом языке (до Java), и это моя первая задача

Я в настоящее время пытается решить проблему с $ {ForEach}

!macro GetSQLVersionFiles first second third fourth 
SetOutPath $TEMP 
${ForEach} ${first} 0 9 + 1 
    ${ForEach} ${second} 0 9 + 1 
     ${ForEach} ${third} 0 9 + 1 
      ${ForEach} ${fourth} 0 9 + 1 
      IfFileExists "scripte\v${first}.${second}.${third}.${fourth}" 0 +2 
      File "scripte\v${first}.${second}.${third}.${fourth}\*.sql" 
      ${next} 
     ${next} 
    ${next} 
${next} 
!macroend 

так что моя идея состояла в том, чтобы сделать ее жизнеспособной для более поздней версии, чтобы иметь макрос с 4 параметрами, в которые можно поместить стартовый каталог, скажем, желаемый «2 5 0 0», и он выполняет итерацию через каждую папку и помещает найденные .sql-файлы в каталог $ TEMP

вещи, которые я имею уже пытались

  • отсылая ко всем параметрам без {}
  • письма «$ {первый} $ {первой} 9 + 1 (думал, что это будет перебирать только от первого до 9)

в ошибка я получаю следующее

!insertmacro: _ForEach 
Usage: StrCpy $(user_var: output) str [maxlen] [startoffset] 
Error in macro _ForEach on macroline 3 
Error in macro GetSQLVersionFiles on macroline 2 
Error in script "\\NAMEOFMYSCRIPT -- aborting creation process 

третьей линии в _ForEach из LogicLib является

StrCpy "${_v}" "${_f}"        ; Assign the initial value 

Заранее благодарим за помощь :)

ответ

2

Вы смешиваете определения и переменные.

Определения создаются с помощью !define и доступны с помощью ${name}.

Переменные создаются с Var и доступны с помощью $name. Есть также встроенные переменные, которые вы можете использовать: $ 0 .. $ 9.

Переменные могут быть изменены во время выполнения, определяет невозможно.

Другая проблема заключается в том, что вы не можете использовать инструкцию File для копирования файлов на компьютере конечного пользователя, вам нужно использовать команду CopyFiles, если вы хотите скопировать файлы во время выполнения. Если, с другой стороны, вы хотите извлечь файлы из установщика (я не могу сказать, что вы хотите, исходя из вашего вопроса), тогда вам нужно использовать инструкцию File, но тогда вы не можете использовать ${For}, потому что это концепция времени исполнения. Вы можете использовать !system до execute a batch file that builds a list of files in a .nsh, чтобы вы тогда !include.

+0

Спасибо большое! Я хотел сделать второй, извлечь файлы из установщика. Думаю, я начну смотреть в пакет, тогда, спасибо! –

Смежные вопросы