11
submitted 8 months ago* (last edited 8 months ago) by BobTheDestroyer@lemy.lol to c/powershell@programming.dev

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!

you are viewing a single comment's thread
view the rest of the comments
[-] d3Xt3r@lemmy.nz 3 points 8 months ago* (last edited 8 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.lol 1 points 8 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 2 points 8 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.

[-] BobTheDestroyer@lemy.lol 1 points 8 months ago

It manages to output one file titled 'name; 0++'

[-] d3Xt3r@lemmy.nz 2 points 8 months ago

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

[-] BobTheDestroyer@lemy.lol 1 points 8 months ago* (last edited 8 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 3 points 8 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.

[-] BobTheDestroyer@lemy.lol 1 points 8 months ago* (last edited 8 months ago)

Just figured it out! Added '.pdf' in the second half of the command.

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

Thanks for all your help!

load more comments (3 replies)
load more comments (3 replies)
load more comments (10 replies)
this post was submitted on 25 Mar 2024
11 points (100.0% liked)

Powershell

1 readers
1 users here now

PowerShell (POSH) is a a task automation command-line shell and scripting language created by Microsoft. It became part of the FOSS community in 2016 and is now available across Windows, Linux, and macOS

Resources:


Rules:

Self-promotion rules:


founded 1 year ago
MODERATORS