Solved

powershell copy and rename specific folders

Posted on 2009-04-02
3
1,486 Views
Last Modified: 2012-06-27
Hi,
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.
Example:

RootFolder
      Test1
      Test2
      1_1_09 Test1
      1_1_09 Test2

I want to achieve this:

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

How can I accomplish this?

Thank you!
0
Comment
Question by:mtnnet
  • 2
3 Comments
 

Author Comment

by:mtnnet
ID: 24049066
I have found a script that I can modify to do what I need, but I was wondering if there is another solution.
http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_22791544.html?sfQueryTermInfo=1+10+copi+folder+powershel
0
 
LVL 9

Accepted Solution

by:
Sander Stad earned 500 total points
ID: 24057560
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
}Else{
	Throw "The path to the folder doesn't exist"
}

Open in new window

0
 

Author Comment

by:mtnnet
ID: 24060433
sstad,
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

0

Featured Post

Best Practices: Disaster Recovery Testing

Besides backup, any IT division should have a disaster recovery plan. You will find a few tips below relating to the development of such a plan and to what issues one should pay special attention in the course of backup planning.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article explains how to prepare an HTML email signature template file containing dynamic placeholders for users' Azure AD data. Furthermore, it explains how to use this file to remotely set up a department-wide email signature policy in Office …
This script can help you clean up your user profile database by comparing profiles to Active Directory users in a particular OU, and removing the profiles that don't match.
This Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

825 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question