grep 2.5.3 представил - параметр исключать-dir, который будет работать способ, которым Вы хотите.
grep -rI --exclude-dir=\.svn PATTERN .
можно также установить переменную среды: GREP_OPTIONS = "-исключать-dir =. svn"
я буду второй Andy голосование за ack, хотя, это является лучшим.
Кажется, нет способа изменить константу сценария с помощью сценария.
Я думаю, что лучше всего изменить целевой каталог для каждой записи в разделе [Files] , например
[Files]
Source: "MYPROG.EXE"; DestDir: "{code:NewTargetDir}"
, и получить новый каталог установки следующим образом:
[Code]
function NewTargetDir(Param: String): String;
begin
Result := ExpandConstant('{app}') + '\MySubDir';
end;
Поскольку NewTargetDir функция будет вызываться непосредственно перед фактическим копированием файла, это должно сработать.
Однако я думаю, вам следует пересмотреть свой подход. Сначала просят пользователя указать каталог для установки, а затем фактическая установка в другой каталог, что, по-видимому, является вашим намерением, это неправильный путь, ИМО. У вас действительно есть веская причина для установки в каталог, отличный от указанного пользователем? Кроме того, результат моего примера кода может быть также достигнут, если указать
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}\MySubDir"
без необходимости в скриптах. Если есть сомнения, выберите более простое решение.
Доступны следующие глобальные объекты: MainForm типа TMainForm, WizardForm типа TWizardForm и UninstallProgressForm типа TUninstallProgressForm и одна специальная константа: crHand типа TControl.Cursor.
Если вы хотите установить в мастере каталог по умолчанию, просто получите доступ к его компонентам, как в обычном коде delphi.
Например, установите для каталога произвольное значение:
WizardForm.DirEdit.Text := 'c:\test';
, чтобы прочитать это значение, которое вы можно использовать функцию WizardDirValue.
Я говорю «просто доступ» ... но мне потребовался час, чтобы понять;)
У меня аналогичная ситуация, когда приложение установки получает путь установки из командной строки. Я использую решение, предложенное Jonx:
WizardForm.DirEdit.Text := 'c:\test';
Пример:
function CompareParameter(param, expected: String): Boolean;
begin
Result := False;
if Length(param) >= Length(expected) then
begin
if CompareText(Copy(param, 1, Length(expected)), expected) = 0 then
begin
Result := True;
end;
end;
end;
function GetParameter(expectedParam: String): String;
var
i : LongInt;
begin
Result := '';
for i := 0 to ParamCount() do
begin
if CompareParameter(ParamStr(i), '/' + expectedParam + '=') then
begin
Result := Copy(ParamStr(i), Length(expectedParam) + 3, Length(ParamStr(i)));
break;
end;
end;
end;
procedure InitializeWizard();
var
newInstallFolder: String;
begin
newInstallFolder := GetParameter('INSTALL_FOLDER');
if Length(newInstallFolder) > 2 then
begin
if Copy(newInstallFolder, 1, 1) = '"' then
newInstallFolder := Copy(newInstallFolder, 2, Length(newInstallFolder) - 2)
if Length(newInstallFolder) > 1 then
WizardForm.DirEdit.Text := newInstallFolder;
end;
end;
Приложение установки запускается из другой установки в автоматическом режиме. У меня это сработало.