Off topic: Powershell to rename pictures
I’m trying hard to convert myself from VBScript to Powershell… so in the need of a powerfull filerenamer I wrote one in Powershell.
You need to download the Powershell Pack from http://code.msdn.microsoft.com/PowerShellPack
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Rikard Ronnkvist / snowland.se # Will rename JPG and AVI files, uses EXIF-tag on JPG-images and filedate on AVI-files. # # Files will be named: # \some path\YYYYMM\YYYYMMDD_HHMMSS_00.JPG # ^^^^^^ - Optional, if you have createSubdir set to True # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $basePath = "F:\Pictures\Import dir" $createSubdir = $True $testMode = $False # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Download from: http://code.msdn.microsoft.com/PowerShellPack Import-Module PowerShellPack # Add \* to use when searching $searchPath = $basePath + "\*" # Search for files Write-Host " Searching: " -ForegroundColor DarkGray -NoNewline Write-Host $basePath -ForegroundColor Yellow $allFiles = Get-ChildItem -Path $searchPath -Include *.AVI,*.JPG -Exclude folder.jpg Write-Host " Found: " -ForegroundColor DarkGray -NoNewline Write-Host $allFiles.Count -ForegroundColor Yellow -NoNewline Write-Host " files" -ForegroundColor DarkGray $fNum = 0 # Loop thru all files foreach ($file in $allFiles ) { $fNum++ # If it is an jpg use the exif-data, otherwise use date on file if ($file.Extension -eq ".JPG") { $imgInfo = $file | Get-Image | Get-ImageProperty $fileDate = $imgInfo.dt } else { $fileDate = $file.LastWriteTime } if ($createSubdir -eq $True) { # Set new filepath $fileDir = $basePath + "\" + $fileDate.ToString("yyyyMM") # Check directory if (!(Test-Path($fileDir))) { # Create a new subdirectory if ($testMode -ne $True) { $newDir = New-Item -Type directory -Path $fileDir Write-Host " Creating: " -ForegroundColor DarkGray -NoNewline Write-Host $fileDir -ForegroundColor Red } } } else { # Use current directory $fileDir = $basePath } # Set new name to current to get "False" on first while $newPath = $file.Fullname $i = 0 while (Test-Path $newPath) { # Set new filename $newPath = $fileDir + "\" + $fileDate.ToString("yyyyMMdd_HHmmss") + "_" + $i.ToString("00") + $file.Extension $i++ } # Write som info Write-Host $fNum.ToString().PadLeft(4) -ForegroundColor DarkYellow -NoNewline Write-Host " / " -ForegroundColor DarkGray -NoNewline Write-Host $allFiles.Count.ToString().PadRight(4) -ForegroundColor Yellow -NoNewline Write-Host " Moving: " -ForegroundColor DarkGray -NoNewline Write-Host $file.Name -ForegroundColor Cyan -NoNewline Write-Host " -> " -ForegroundColor DarkGray -NoNewline Write-Host $newPath -ForegroundColor Green # Move and rename the file if ($testMode -ne $True) { Move-Item $file.Fullname $newPath } }
Ending up with something like this:
Oh, and you can add -Recurse on the Get-ChildItem row…