File Mover Blog

April 24, 2019

Pascal Script, User Request Example No 2

Dear users,

Second Pascal Script is based on the following user request:

We need some help on setting up a rule.  The rule we are trying to setup is as follow. Source folder has files in it, example file names ABC-test.txt, 123_test.txt, and test_XYZ.txt.  We have a destination folder called “Test”, and we have 3 folders under it called ABC, 123, and XYZ.  We want the rule to separate the files and place them in their specified folders.  For example, file ABC-test.txt will be placed into folder ABC, 123_test.txt file will be placed into folder 123, and text_XYZ.txt file will be place into folder XYZ.  We want the files to be moved into the separated folders that matches their name.

> Add your Destination:

> Destination Setup, change the ‘Create Subdir, opt.’ to %VSB

> Add the following ‘On Rule Begin’ Pascal Script. Very important: the ctOutputPath contant must be the same as your destination path (first screenshot) !

Var
  iList: Integer;
  tmpSub: String;
  tmpList: TStringList;
Const
  ctOutputPath = 'C:\Test\Out\';
Begin
  psExitCode:= 1;
  // ... add your code here
  psVSA := '';
  tmpList := TStringList.Create;
  Try
    psListPaths(ctOutputPath, '*.*', 0, tmpList);
    for iList := 0 to (tmpList.Count-1) do
    Begin
      tmpSub := tmpList.Strings[iList];
      tmpSub := psStringReplace(tmpSub, ctOutputPath, '');
      tmpList.Strings[iList] := tmpSub;
    End;
    psVSA := tmpList.CommaText;
    // Debug
    psLogWrite(1, '', 'SubFolder found: ' + psVSA);
  Finally
    tmpList.Free;
  End;
End.
> Add the following ‘On Destinations‘ Pascal Script.
Var
  iList: Integer;
  tmpSub: String;
  tmpList: TStringList;
Const
  ctOutputSubPathNone = 'None\';
Begin
  psExitCode:= 1;
  // ... add your code here
  psVSB := ctOutputSubPathNone;
  // Iterate
  tmpList := TStringList.Create;
  Try
    tmpList.CommaText := psVSA;
    tmpList.Sort;
    for iList := (tmpList.Count-1) downto 0 Do
    Begin
      tmpSub := tmpList.Strings[iList];
      tmpSub := psStringReplace(tmpSub, '\', '');
      psLogWrite(1, '', 'Sub: ' + tmpSub);
      If Pos(LowerCase(tmpSub), LowerCase(psFileName)) <> 0 Then
      Begin
        psVSB := tmpSub;
        Break;
      End;
    End;
    // Debug
    psLogWrite(1, 'Destination SubFolder will be: ', psVSB);
  Finally
    tmpList.Free;
  End;
End.

If you have any question about this example, don’t hesitate to ask.

Regards,
Limagito Team

By Limagito-Team Pascal Script , Share:
SEARCH