[Last Call] Learn how to a build a cloud-first strategyRegister Now

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1636
  • Last Modified:

powershell copy and rename specific folders

I am a Powershell newbie and I am trying to make copies of specific folders and rename them to include the date in the same root folder. The are other folders in that folder that contain a previous date.

      1_1_09 Test1
      1_1_09 Test2

I want to achieve this:

      1_1_09 Test1
      1_1_09 Test2
      <current_date> Test1
      <current_date> Test2

How can I accomplish this?

Thank you!
  • 2
1 Solution
mtnnetAuthor Commented:
I have found a script that I can modify to do what I need, but I was wondering if there is another solution.
Sander StadCommented:
I tweaked my own script a little so it suites your needs. What it does is it looks up all the folder in a specific given directory. It checks if the directory doesn't start with a number. If a result is found it renames the directory.

I assumed that the dateformat was day_month_year. You can edit this by using the "d" for the day, "M" for the month and the "y" for the year.

The script asks for a parameter. Your commandline could look like this:
powershell Myscript.ps1 -folder C:\MyfolderThatHasToBeRenamed

Here is the script

Param($folder = $(Throw "No folder given"))
Function RenameFolder([string]$folder){
	# Generate the lookup array
	$arrNumbers = 1..31
	# Create the dateformat
	$date = Get-Date -format "d_M_yy"
	# Lookup all the folders in the given directory
	$arrFolders = Get-ChildItem $folder | Where {$_.psIsContainer -eq $true} | Sort-Object {$_.FullName} -Descending
	# Loop through the array
	Foreach($item In $arrFolders){
		# Convert the item to a string
		[string]$i = $item
		# Get the first character from teh string
		$sub = $i.Substring(0, 1)
		# If the substring is not in the number array than continue
		If($arrNumbers -notcontains $sub){
			# get the old folder
			$old = $item.FullName
			# create the new folder
			$new = $folder + "\" + $date + " " + $i
			# rename the folder
			Move-Item $old $new
# Test if the given folder exists
If(Test-Path $folder){
	RenameFolders $folder
	Throw "The path to the folder doesn't exist"

Open in new window

mtnnetAuthor Commented:
Thanks for replying and taking the time to modify your script.
This script will be used to copy VMs and it will be scheduled so I can't have user imput and  I don't need to move the contents, just copy them.  If I'm not mistaking move-item $old $new would move the whole old folder to the new folder.

I have also come up with another  simpler script because I also have other folders that do not start with numbers in the root folder. (I know, I didn't mention that previously)

I will give you points for answering most of the problem and giving me some ideas on how to improve my script.

Thank You!

$date = Get-Date -format "MM_dd_yyyy"
$arrSource = @("test1","test2")
$arrTarget = @("$date copy_of_test1","$date copy_of_test2" )
for ($i=0; $i -le $arrSource.Count-1; $i++)
New-Item $arrTarget[$i] -itemType directory
Copy-Item ("C:\Test\" + $arrSSource[$i] + "\*") $arrTarget[$i]

Open in new window


Featured Post

 The Evil-ution of Network Security Threats

What are the hacks that forever changed the security industry? To answer that question, we created an exciting new eBook that takes you on a trip through hacking history. It explores the top hacks from the 80s to 2010s, why they mattered, and how the security industry responded.

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