1. ## Renaming multiple files

I have a number of files that have a date at the front of their name, e.g. 20120130-filename01...20120201-filename32, etc. I want to rename the files so that I retain the file name, but lose the prefix date. I figure that there must be a way to do this, but I haven't done a lot of editing stuff in Windows for a long time and have obviously forgotten how - I am using Win 7, but this is most likely a "General Windows" question. Maybe it can't be done, but I am hoping it is something relatively simple. Any insight that anyone can provide will be greatly appreciated. Thanks.

Ron M

2. Ron,
The only way I can think of is to select all the files you want to rename, press F2, and type a name. This will rename them filename, filename(1), filename(2), and so on. Probably not quite what you want.

3. I would suggest Lupas Rename, Google it. It's an old program, but it is free, and it works. You can re-name any number of files, specifying a format, it gives you a preview of what the files will be named just in case you got something wrong, then click on Rename and it's done.

4. Here is a PowerShell script that will do this renaming for you:

Code:
param (
[string]$directory = ".", [switch]$quiet,
[switch]$whatIf ) [string]$regex = "^\d{6,8}-"

function checkForDuplicate($file,$newBaseName) {
$result =$file.Directory.FullName + "\" + $newBaseName +$file.Extension
if ([System.IO.File]::Exists($result)) {$i = 1
do {
$result =$file.Directory.FullName + "\" + $newBaseName + "_" +$i + $file.Extension$i++
} while ([System.IO.File]::Exists($result)) }$result
}

filter startsWithDate() {
$baseName =$_.BaseName
if ($baseName -match$regex) {
$newBaseName =$baseName -replace $regex,""$newName = checkForDuplicate $_$newBaseName
if ($whatIf) {$newFile = [System.IO.FileInfo]$newName "Would have renamed " +$_.FullName + " to " + $newFile.Name } else { if (!$quiet) {
$newFile = [System.IO.FileInfo]$newName
"Renaming " + $_.FullName + " to " +$newFile.Name
}
$_.MoveTo($newName)
}
$script:count++ } }$count = 0
Get-ChildItem $Directory -Recurse -Force | startsWithDate "Renamed$count files"
To use this, save the above text into a file such as rename.ps1. Then open a PowerShell command line, cd to the directory containing the script, and enter:

.\rename.ps1 c:\directory\containing\your\files\to\rename

and it will rename the files in that directory and all subdirectories, letting you know the new name for each file.

The script is set up to handle both 6 and 8 digit dates. The script also checks for duplicate names. For example, if you have 20120209-proposal.docx and 20120208-proposal.docx, it will rename one of them to proposal.docx and the other to proposal_1.docx.

You can also pass the -whatif argument and the script will tell you what it would rename files to, but not actually do any renaming:

.\rename.ps1 c:\directory\containing\your\files\to\rename -whatif

There is one glitch with the -whatif capability - since the files are not really being renamed, the script will not notice potentially duplicate names. For example, it will tell you that both of the example files from above will be renamed proposal.docx.