Rename Files To Time Last Modified
A PowerShell Script which copies files from DIR_IN to DIR_OUT, while renaming each file to the time said file was last modified.#My Working Directories $DIR_IN = 'C:\alpha\input' $DIR_OUT = 'C:\alpha\output' #Loop Over DIR_IN $Items = Get-ChildItem -Path $DIR_IN ForEach ($old_name in $items) { #Assemble New Name $base = $old_name.LastWriteTime $base = $base.ToString("yyyy-MM-dd-hh-mm-ss") $base += '-BrettRants' $ext = $old_name.Extension $new_name = $base + $ext #Path In and Out $path_in = JOIN-PATH $DIR_IN $old_name $path_out = JOIN-PATH $DIR_OUT $new_name #A Bit Of Feedback $path_in $path_out #Make The New Copy Copy-Item $path_in $path_out }
To work, the above would need to be saved as a Powershell Script and run from file. And to do that, the Execution Policy needs to be reset:
Set-ExecutionPolicy Bypass -Scope Process
The only part of the above which is the least bit interesting to me is the portion entitled
#Assemble New Name
, so that's the only portion I will discuss further.#Assemble New Name
- Shall we comment?
- Yes, we shall.
$base = $old_name.LastWriteTime
- This extracts a time object from the old file...
- Meaning,
$old_name
would have been more accurately called$file_in
.- Live & Learn!
- Meaning,
$base = $base.ToString("yyyy-MM-dd-hh-mm-ss")
- The time object is converted to a string in the noted format.
$base += '-BrettRants'
- You may not want this part.
- I do.
$ext = $old_name.Extension
- It's really handy that PowerShell Items are Complete Objects.
- I'm finding everything to be very robust.
$new_name = $base + $ext
- And here we have a simple bit of string concatenation.
Bam!
And done!