Search code examples
windows-10rename

How to rename multiple files by increasing a single character in each one?


I want to automate a process to rename multiple files by increasing a single character for their order upon insertion of a new file (in Windows File Explorer, Windows 10). For example, I have a folder with 4 pdfs with the following names:

Tab A - Name_1.pdf
Tab B - Name_2.pdf
Tab C - Name_3.pdf
Tab D - Name_4.pdf

I want to add a pdf to this which is the new tab B. For example, its name is "Tab B - New_Name.pdf". Currently, I need to manually go and rename each file afterwards to reorder them. In this case, the files after the addition need to be as such:

Tab A - Name_1.pdf
Tab B - New_Name.pdf
Tab C - Name_2.pdf
Tab D - Name_3.pdf
Tab E - Name_4.pdf

I needed to manually increase the tab character by one for the last three pdfs. In examples such as this, it doesn't take too long, but sometimes I have hundreds of pdfs going into the AA, BBB, CCCC, etc. ranges. How can this be automated?

I have done some looking into bash options but haven't found anything that is quite what I'm looking for here, especially with the order being with a character rather than an integer.


Solution

  • For windows, check how to use Perl's rename

    Or simply download it with Perl dependency.

    $ ls -1
    new.pdf
    'Tab A - Name_1.pdf'
    'Tab B - Name_2.pdf'
    'Tab C - Name_3.pdf'
    'Tab D - Name_4.pdf'
    
    $ rename  '
        sub mytr{
            shift;
            $_ = substr($_, 4, 1); 
            y/B-Y/C-Z/;
            return " $_ "
        };
        s@ [A-Z] @ mytr($&)@e;
        s@(\d+)@$1+1@e
    ' *Name_{4..2}*.pdf
    
    $ ls -1
    new.pdf
    'Tab A - Name_1.pdf'
    'Tab C - Name_3.pdf'
    'Tab D - Name_4.pdf'
    'Tab E - Name_5.pdf'
    
    $ mv new.pdf Tab\ B\ -\ Name_2.pdf 
    
    $ ls -1
    'Tab A - Name_1.pdf'
    'Tab B - Name_2.pdf'
    'Tab C - Name_3.pdf'
    'Tab D - Name_4.pdf'
    'Tab E - Name_5.pdf'