You are not logged in.
First of all , a very neat program. i have just started using it and it is very helpful.
I have a scenario which i am requesting help with please....
I have a folder which i wish to serialize (file names). That is ok.
I then add more files to this folder. I now want to serialize the new files but i want the index to begin from where it finished previously.
EG
I have test001, test002
I add new files to the folder. I now wish to rename these so they continue the numbering sequence...test003, test004 etc..
I am sure this had probably been explained in this forum, but i couldnt find the exact solution.
Any hints would be much appreciated.......
Pali
Offline
It can't start automatically from the last. So you will have to look for the last number and after that, with the serialize rule in "index starts" put the next number
I don't know if you where asking just about this or need more help...
If this software has helped you, consider getting your pro version. :)
Offline
thanks
Any hint as to how i can look for the last highest number.
i would know how to do it in Vbscript but i have no experience in delphi....
thanks again
Offline
Hi Pali and welcome to the community.
Any hint as to how i can look for the last highest number.
Just scroll down and take an look yourself? Perhaps before adding more files.
Kind of automation:
_ add rule to delete last chars (the numbers) See "Delete"-rule and right-to-left option
_ and then just serialize all again, older and newer files together.
HTH?
Read the *WIKI* for HELP + MANUAL + Tips&Tricks.
If ReNamer had helped you, please *DONATE* to Denis or buy a PRO license. (Read *Lite vs Pro*)
Offline
Yes, i could just check the previous highest number and manually change the start number for the serialization rule.
But i want to be able to run this silently, via a command line, without manual intervention. It is for a user that is totally non-computer literate.
Also, i dont want previously serialized files to change names. If i re-serialize everytime, then filenames will change. The previous file names must remain because they will be used.
I was hoping there would be a way of doing it via a script. EG
1. Read all the file names in the folder and get the last 4 charahcters (the serialized numbers)
2. Put them into an array
3. choose the highest number in the array.
4. increment the highest number by 1 and put in a variable.
5. tell the serilaize rule to start from the variable set above.
Thanks for the responses so far......
Offline
1. Read all the file names in the folder and get the last 4 charahcters (the serialized numbers)
2. Put them into an array
3. choose the highest number in the array.
4. increment the highest number by 1 and put in a variable.
5. tell the serilaize rule to start from the variable set above.
It is doable, just requires some coding... The only problem is the last point "tell the serialize rule to start from...", because scripts have no connection to other rules. You will just have to do serialization with the same script, like shown below.
function ExtractNumber(S: String; out Number: Integer): Boolean;
var
I, PosStart, PosEnd: Integer;
begin
Result := False;
PosStart := -1;
Posend := -1;
for I:=Length(S) downto 1 do
if IsWideCharDigit(S[i]) then
begin
PosEnd := I;
Break;
end;
if PosEnd > 0 then
for I:=PosEnd-1 downto 1 do
if not IsWideCharDigit(S[i]) then
begin
PosStart := I + 1;
Break;
end;
Result := (PosStart > 0) and (PosEnd > 0);
if Result then
Number := StrToInt(Copy(S, PosStart, PosEnd-PosStart+1));
end;
var
Initialized: Boolean;
Files: TStringsArray;
I, Number, MaxNumber: Integer;
begin
if not Initialized then
begin
Initialized := True;
WideScanDirForFiles(
WideExtractFileDir(FilePath),
Files, False, False, False, '*.*');
MaxNumber := 0;
for I:=0 to Length(Files)-1 do
if ExtractNumber(WideExtractBaseName(Files[i]), Number) then
if Number > MaxNumber then MaxNumber := Number;
end;
MaxNumber := MaxNumber + 1;
FileName := WideExtractBaseName(FileName) +
IntToStr(MaxNumber) + WideExtractFileExt(FileName);
end.
Here is a screenshot of how it works:
Offline
Cheers for that DEN4B.
I tried ur function and it worked as expected.
However I finally ended up doing it by using vbscript to edit the .rnp files with the values required.
Here is the script im using.
FileName = "C:\Program Files\ReNamer\Presets\ClearVision.rnp"
NewIndexStart = Inputbox ("Enter number you want to start with", "Rename Files - Enter Number")
If NewIndexStart = "" Then
msgbox "You must enter a number"
wscript.Quit()
End If
NewPrefix = Inputbox ("Enter letters you want to start with", "Rename Files - Enter Letters")
If NewPrefix = "" Then
msgbox "You must enter correct pre-fix"
wscript.Quit()
End If
'Read source text file
FileContents = GetFile(FileName)
'Find the exact INDEX value
indexpos = Instr(1,FileContents,"INDEX")
ColonPos = Instr(indexpos,FileContents,";")
LengthOfOldIndex = ColonPos - indexpos
Find = Mid(FileContents,indexpos,LengthOfOldIndex)
ReplaceWith = "INDEX:" & NewIndexStart
'replace all string In the source file
dFileContents = replace(FileContents, Find, ReplaceWith, 1, -1, 1)
'Find the exact TEXT value
Textpos = Instr(1,dFileContents,"Config=TEXT:")
ColonPos = Instr(Textpos,dFileContents,";")
LengthOfText = ColonPos - Textpos
Find = Mid(dFileContents,Textpos,LengthOfText)
ReplaceWith = "Config=TEXT:" & NewPrefix
'replace all string In the source file
dFileContents = replace(dFileContents, Find, ReplaceWith, 1, -1, 1)
'Compare source And result
if dFileContents <> FileContents Then
'write result If different
WriteFile FileName, dFileContents
Wscript.Echo "Script Updated."
Else
'Wscript.Echo "Searched string Not In the source file"
End If
'run renamer.exe
Set WshShell = WScript.CreateObject("WScript.Shell")
exitcode = WshShell.run("""C:\Program Files\ReNamer\ReNamer.exe"" /rename ""ClearVision"" ""C:\Data\Clear Vision\Holland\Scanned Invoices\PART""",1,TRUE)
If exitcode = 0 Then
msgbox "Files renamed successfully!"
Else msgbox "There was a problem with this program. Please contact Pali"
End If
'Read text file
function GetFile(FileName)
If FileName<>"" Then
Dim FS, FileStream
Set FS = CreateObject("Scripting.FileSystemObject")
on error resume Next
Set FileStream = FS.OpenTextFile(FileName)
GetFile = FileStream.ReadAll
End If
End Function
'Write string As a text file.
function WriteFile(FileName, Contents)
Dim OutStream, FS
on error resume Next
Set FS = CreateObject("Scripting.FileSystemObject")
Set OutStream = FS.OpenTextFile(FileName, 2, True)
OutStream.Write Contents
End Function
Just another quick question please. Does renamer.exe return any exit codes that could identify if there was a problem whilst executing from the command line?
Otherwise, a fantastic little program that i would recommend to all......
Offline