/* * $VER: DOpus4-SeqRename 1.0 (07 Jul 2015) by Wizardry and Steamworks * * © 2015 Wizardry and Steamworks * * PROGRAMNAME: * DOpus4-SeqRename * * FUNCTION: * Batch-renames files given a prefix and an increment pattern. * * USAGE: * ARexx command DOpus4-SeqRename.rexx (from DOpus) * * $HISTORY: * * 07 Jul 2015 : 1.0 : initial release * */ Opus = Address() /* Get the DOpus address. */ Options RESULTS /* Request results. */ Address value Opus /* Use the DOpus address. */ Busy On /* Set the busy pointer. */ /* Get all the selected items and check if something is actually selected. */ GetSelectedAll '*' /* Get all the selected items. */ ThisItems = RESULT /* Normalize, heh... */ ThisItems = Translate(Translate(ThisItems, '/', ' '), ' ', '*') n = Words(ThisItems) /* Get the number of selected items. */ If n <= 0 Then /* Check if no items were selected. */ Do /* If no items were selected, */ TopText 'No items were selected...' Busy Off /* turn off the busy pointer. */ Exit /* and terminate. */ End TopText 'Please enter the rename file-name prefix.' GetString "Prefix:" Prefix = RESULT If Prefix = 'RESULT' Then Do TopText 'No rename file-name prefix provided!' Busy Off Exit End TopText 'Please enter the rename pattern suffix.' GetString "Pattern:" Pattern = RESULT If Pattern = 'RESULT' Then Do TopText 'No rename pattern suffix provided!' Busy Off Exit End /* Generate all the intermediary patterns. */ Sequence = wasGenerateStringSequence(Pattern, Words(ThisItems)) /* Get all items. */ GetAll '*' ThisWindow AllItems = RESULT /* Normalize, heh... */ AllItems = Translate(Translate(AllItems, '/', ' '), ' ', '*') /* Batch rename all the items... */ TopText "Sequence-renaming all selected items..." SequenceIndex = 1 Count = Words(AllItems) Do i = 1 To Count ThisName = SubWord(AllItems, i, 1) /* If the file is not selected, then skip it. */ If Find(ThisItems, ThisName) = 0 Then Iterate i OrigName = Translate(ThisName, ' ', '/') /* Preserve file-name extension during rename. */ Dot = LastPos('.', OrigName) Select When Dot ~= 0 Then /* We have a file extension. */ Rename OrigName Prefix||SubWord(Sequence, SequenceIndex, 1)||SubStr(OrigName, Dot) Otherwise Rename OrigName Prefix||SubWord(Sequence, SequenceIndex, 1) End /* Bail if the sequence rename fails. */ If RC ~= 0 Then Do Notify "There was an error renaming: "OrigName BusyOff Exit End SequenceIndex = SequenceIndex + 1 End TopText "\m/(-.-)\m/ There you go!" Busy Off /* Turn off the busy pointer. */ Exit /* Terminate. */ /*************************************************************************/ /* Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 */ /*************************************************************************/ wasGenerateStringSequence: procedure /* Generate a string sequence. */ Parse ARG First,Count,X If Count = 0 Then Return '' If Length(X) ~= 1 Then Return First||" "||wasGenerateStringSequence(First, Count - 1, 1) Result = '' c = 1 Length = Length(First) Do While Length ~= 0 x = SubStr(First, Length, 1) Select When DataType(x) = 'NUM' Then Do Sum = x + c Select When Sum > 9 Then Do Result = 0||Result c = 1 End Otherwise Do Result = Sum||Result c = 0 End End End Otherwise Do Sum = D2C(C2D(x) + c) Select When Sum > 'z' Then Do Result = 'a'||Result c = 1 End Otherwise Do Result = Sum||Result c = 0 End End End End Length = Length - 1 End If c ~= 0 Then Result = c||Result If Count - 1 = 0 Then Return Result Return Result||" "||wasGenerateStringSequence(Result, Count - 1, 1)