Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 88
  • Last Modified:

Batch Rename with Powershell

Hi, I have got a list of about 140,000 .pdf files that I need to rename. I have a csv file that is in the following format

oldfilename,newfilename
example1oldname,example1newname

The files are located on a server, all in 1 folder. What would the powershell command, or a batch file script be to rename the old file name with the new file name?

We can use the example file location of : "\\server-bgs-bg02\My_Data\master\IMAGES\"

thanks for your help!
0
Brent Guttmann
Asked:
Brent Guttmann
  • 5
  • 5
  • 2
  • +1
1 Solution
 
footechCommented:
There's not much to this one.  You just need to adjust the path to your .CSV as appropriate.
Set-Location "\\server-bgs-bg02\My_Data\master\IMAGES\"
$csvFile = "c:\temp\yourfile.csv"
Import-CSV $csvFile | ForEach { Rename-Item -Path $_.oldfilename -Newname $_.newfilename }

Open in new window

You can add the -whatif parameter to the Rename-Item command if you'd like to test beforehand.
0
 
Brent GuttmannAuthor Commented:
and I would just paste this into power shell? Or would it be a .bat file?   I tried pasting it into powershell but nothing happened
0
 
Bill PrewCommented:
Here is a BAT script approach, save as a .BAT file, adjust SETs near the top, and test, test, test...

@eho off
setlocal

set BaseDir=\\server-bgs-bg02\My_Data\master\IMAGES\
set ListFile=c:\temp\list.txt

for /f "usebackq tokens=1-2 delims=," %%A in ("%ListFile%") do (
  ren "%BaseDir%\%%~A" "%%~B"
)

Open in new window

~bp
0
Has Powershell sent you back into the Stone Age?

If managing Active Directory using Windows Powershell® is making you feel like you stepped back in time, you are not alone.  For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why.

 
Brent GuttmannAuthor Commented:
I tried this and it is saying that it cannot find the path specified (on the server). It is reading the csv correctly, which is located in the temp file.. just not finding the network paths..

Note - I do not have admin privileges - Not sure if that is effecting it or not... but, I can access the network in powershell... (obviously just not in regular command prompt..)

sorry, this is probably something basic - I just dont have any experience with it yet
0
 
Bill PrewCommented:
Sorry, extra backslash, should be like this:

@eho off
setlocal

set BaseDir=\\server-bgs-bg02\My_Data\master\IMAGES
set ListFile=c:\temp\list.txt

for /f "usebackq tokens=1-2 delims=," %%A in ("%ListFile%") do (
  ren "%BaseDir%\%%~A" "%%~B"
)

Open in new window

~bp
0
 
Brent GuttmannAuthor Commented:
Hey, see attached and below... what am I missing here?

@eho off
setlocal

set BaseDir="c:\temp\testing"
set ListFile="c:\temp\testing.csv"

for /f "usebackq tokens=1-2 delims=," %%A in ("%ListFile%") do (
  ren "%BaseDir%\%%~A" "%%~B"
)
example.pdf
testing.txt
0
 
Brent GuttmannAuthor Commented:
and i originally tried it with .txt and without quotes.. just fyi
0
 
Bill PrewCommented:
Don't use any quotes in the two SETs, as I showed.

~bp
0
 
Brent GuttmannCommented:
Yes, I tried without them as well without any luck
0
 
Bill PrewCommented:
I tested here, this worked for me, what do you get when you run it?

@echo off
setlocal

set BaseDir=b:\ee\EE28961920\the files
set ListFile=b:\ee\EE28961920\list.txt

for /f "usebackq skip=1 tokens=1-2 delims=," %%A in ("%ListFile%") do (
  ren "%BaseDir%\%%~A" "%%~B"
)

Open in new window

~bp
0
 
Brent GuttmannCommented:
it just opens the command prompt window for a second, then it closes ... without the files being renamed
0
 
footechCommented:
Yes, mine works if you just paste it into PowerShell.  You could also save it as a .ps1 file and run that file from PS (but you should read up on the basics of running PowerShell scripts if you're not familiar with that).

Using your example input .CSV (which you posted as "testing.txt", though it is in a .csv format), the problem is with the new file names.  "/" is not an allowed character.  Replace all those with something else, like a dash "-", and it works fine.  Almost any problem will result in an error being displayed (as it did when I tried to use your sample .CSV).
1
 
Bill PrewCommented:
Try this for debugging and see what it displays.

@echo on
setlocal

set BaseDir=b:\ee\EE28961920\the files
set ListFile=b:\ee\EE28961920\list.txt

for /f "usebackq skip=1 tokens=1-2 delims=," %%A in ("%ListFile%") do (
  ren "%BaseDir%\%%~A" "%%~B"
)
pause

Open in new window

~bp
0
 
Brent GuttmannAuthor Commented:
That worked after I switched the / with the -.     That may have also prevented the .bat file from working correctly as well, BP.  

Thank you both for your help,  i have saved both codes for future ref.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 5
  • 5
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now