Q: Moving a file based on specific filename part to specific folder
Hi there, looking if your software can do this please.
1) Look at a filename, parse out from character 8-16 and capture it as a ID number
2) look at the subfolders, find folder with same name, if doesn’t exist, create.
3) move the file to that location.
Here is some more specific example
PDF Name: 055400E900105028-DEN-20210412_12.pdf
Folder name to search for, and if not exists, create and move the data.
900104028
The bolded number is the ID number we need to catch/reference.
I think it could just skip the file in this ‘rule’ if the length of the file is not ok which would mean it doesn’t contain an ID number.
For this 1 rule/purpose these files come from a third party provider which should be pretty consistent and contain that number.
The problem is some folders contain only the ID and is missing the buffer 0’s we put in front.
So pdf may say 000000465 but the folder that already exists may be called 465 ☹
Hopefully your tool can assist in more than one way (which it looks like it can!)
A: Yes this should be possible. We prepared some screenshots to get you started.
1.You can use any Source but in this example we used a WIN folder:
2. File Filter Setup
The minimum file length we need is 20 (this includes the file extension). We are using the RegEx Include File Filter:
^[^|/\<>:?”*]{20,}$
3.Now we need some Pascal Script to achieve the customer request:
Be sure to set the ctOutputPath Constant to the Destination path you are using. In our example the Destination path will be ‘C:\Test\Out_Pdf\’.
When the File ID starts with 0 then we’ll check if the ID as subfolder exists without the zeros. If it exists we’ll use that one but when not, then the complete ID will be used to create a new destination subfolder.
Var
tmpDummyPath: String;
tmpSubPath: String;
Const
ctOutputPath = 'C:\Test\Out_Pdf\';
Begin
psExitCode := 0;
tmpSubPath := Copy(psFilename, 8, 9);
psLogWrite(1, '', 'Stripped ' + tmpSubPath + ' from ' + psFilename);
//
IF Copy(tmpSubPath, 1, 1) = '0' Then
Begin
If Not DirectoryExists(ctOutputPath + tmpSubPath) Then
Begin
tmpDummyPath := tmpSubPath;
Repeat
tmpDummyPath := Copy(tmpDummyPath, 2, length(tmpDummyPath) - 1);
If DirectoryExists(ctOutputPath + tmpDummyPath) Then
Begin
tmpSubPath := tmpDummyPath;
Break;
End;
Until Copy(tmpDummyPath, 1, 1) <> '0';
End;
End;
// The End
psVSA := tmpSubPath;
// Check
If psVSA <> '' Then
psExitCode := 1;
End.
4. WIN as Destination setup. Important because for this request we need a WIN as Destination.
Important, be sure the ctOutputPath Constant in the previous Pascal Script is the same as this path.
Please enable and set the Create SubDir option to: %VSA
5. Result
Source Files:
The file RegEx filter will ignore a file when its length < 20. In this case file ‘055400E9001050.pdf’ will not be used.
Destination Subfolders:
- Subfolder 105208 was already available and was used because of the ‘zero’ prefix in the ID number.
- Subfolder 900105028 was created by our File Mover.
RunTime Log:
File ‘055400E000105028-DEN-20210412_12 – Copy.pdf’ was copied to ‘C:\Test\Out_Pdf\105028\’ because this already existed. The Pascal Script removed the zeros from the ID number and checked if it already was available.
File ‘055400E900105028-DEN-20210412_12.pdf’ was copied to ‘C:\Test\Out_Pdf\900105028\’. The ID number has no ‘zero’ prefix so the complete ID number was used to create the subfolder.
As you see many options are possible with Limagito File Mover so don’t hesitate to ask.
If you need any
help with this ‘specific filename part to specific folder’ request, please let us know.
Best Regards,
Limagito Team