Note: I’m a beginner to Powershell and a bit more familiar with Bash (though still a beginner for that too).

*I have multiple PDF files and I want to rename each file based on a list of names found in an Excel/CSV (could be a text file if easier) file.

*The list begins at the A2 cell and the A1 cell has the header ‘name’.

*The files are in sequential order and match the order of the list of names.

Thanks for your help!

  • BobTheDestroyer@lemy.lolOP
    link
    fedilink
    arrow-up
    0
    ·
    6 months ago

    Perhaps my directions were unclear. The Excel/CSV file has the new names and I want to use them to replace the default names for the PDF files.

    • d3Xt3r@lemmy.nz
      link
      fedilink
      arrow-up
      0
      ·
      edit-2
      6 months ago

      There’s no point in having a CSV for just a single column, just make it a simple text file and it’ll simplify the code a bit. So assuming you have a file called names.txt, here’s a one-liner that can do the trick:

      $names = cat "\path\to\names.txt"; $i=0; dir | % { ren $_ "$($names[$i]); $i++" }
      

      As long as the order in your text file matches the order shown by dir, you shouldn’t have any issues. Maybe do a dry run with a -WhatIf to the ren first to see how the files are being renamed, before you do the actual rename. :)

      • BobTheDestroyer@lemy.lolOP
        link
        fedilink
        arrow-up
        0
        ·
        6 months ago

        Also I had someone help with a similar task of duplicating a Word file that is renamed from a list of names found in a csv file. What would be the code when a txt file is used?

        Import-csv ‘.\individuals.csv’ | foreach-object {
            $newname = ‘2’ + $_.name + '.docx’
            Copy-item '.\_2023 Summary Page.docx' $newname
        }
        
        • d3Xt3r@lemmy.nz
          link
          fedilink
          arrow-up
          0
          ·
          6 months ago

          If it’s a simple text file then you can use:

          cat '.\individuals.txt' | foreach-object {
              $newname = ‘2’ + $_ + '.docx’
              Rename-item '.\_2023 Summary Page.docx' $newname
          }
          
          • Gurfaild@feddit.de
            link
            fedilink
            arrow-up
            0
            ·
            edit-2
            6 months ago

            That will crash if there is more than one line in individuals.txt, because by the second iteration ‘.\_2023 Summary Page.docx’ has been renamed.

      • BobTheDestroyer@lemy.lolOP
        link
        fedilink
        arrow-up
        0
        ·
        6 months ago

        Thanks but I’m getting a ‘Cannot create a file when that file already exists.’ error. I checked the path so I am certain it is correct.

        • d3Xt3r@lemmy.nz
          link
          fedilink
          arrow-up
          0
          ·
          6 months ago

          That means there’s a duplicate entry, check the full error message for the file name. You can also use the -Verbose switch to see what’s going on.

            • d3Xt3r@lemmy.nz
              link
              fedilink
              arrow-up
              0
              ·
              6 months ago

              Ah, I misplaced a quote in my code, I’ve update the post - try version.

              • BobTheDestroyer@lemy.lolOP
                link
                fedilink
                arrow-up
                0
                ·
                edit-2
                6 months ago

                So it sort of worked in that it outputed a bunch of files with the names but with blank icons and not the Adobe icons. Powershell also had an error for each list item that looked like the following:

                Rename-Item : Cannot bind argument to parameter 'NewName' because it is an empty string.
                At line:1 char:86
                + ... ads\individuals.txt"; $i=0; dir | % { ren $_ "$($names[$i])"; $i++ }
                +                                                   ~~~~~~~~~~~~~~~
                    + CategoryInfo          : InvalidData: (:) [Rename-Item], ParameterBindingValidationException
                    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.Rena
                   meItemCommand
                

                Maybe the command needs ‘.pdf’ somewhere?

                • d3Xt3r@lemmy.nz
                  link
                  fedilink
                  arrow-up
                  0
                  ·
                  6 months ago

                  Well yeah, you need the full name of the file. PowerShell will not automatically asumme the extension of a file.

                  Also that empty string error means there’s a blank line somewhere in your input list, so you’ll need to get rid of that.