Reputation:
Via power-shell script, trying to add $Album variable to naming sequence.
Tried write host, variable is working. Have tried things like () [] {} "" '' . ect.
The goal is to get $Album
to work in this line below: {0:D2}$Album.mxf
$i = 1
$Artist = " Name"
$Type = "Type"
$Location = "Loc"
$Month = "Month"
$Year = "2019"
$Album = "$Artist $Type $Location $Month $Year"
# Write-Host -ForegroundColor Green -Object $Album;
Get-ChildItem *.mxf | %{Rename-Item $_ -NewName ('{0:D2}$Album.mxf' -f $i++)}
Before:
Current:
Goal:
Upvotes: 1
Views: 645
Reputation: 27408
Or like this (works both in an interactive session and in a script). And you want a space before $album
.
Get-ChildItem *.mxf | Rename-Item -NewName { "{0:D2} $Album.mxf" -f $script:i++ }
EDIT: There is another way. It is little known that foreach-object can take 3 script blocks (begin/process/end). -process can take a script block array as documented. You can always test these things with -whatif.
Get-ChildItem *.mxf |
foreach { $i = 1 } { Rename-Item $_ -NewName ("{0:D2} $Album.mxf" -f $i++) -whatif }
Upvotes: 0
Reputation: 437042
Your own answer is effective, but it is awkward in two respects:
It mixes expandable strings (string interpolation inside "..."
) with template-based string formatting via the -f
operator.
It uses %
(ForEach-Object
) to launch Rename-Item
for every input object, which is quite inefficient.
Here's a solution that provides a remedy, by using -f
consistently and by using a delay-bind script block:
$Artist = " Name"
$Type = "Type"
$Location = "Loc"
$Month = "Month"
$Year = "2019"
$Album = "$Artist $Type $Location $Month $Year"
$i = 1
Get-ChildItem *.mxf |
Rename-Item -NewName { '{0:D2} {1}.mxf' -f ([ref] $i).Value++, $Album }
Note the use of ([ref] $i).Value++
to increment the value of $i
, which is necessary, because the delay-bind script block passed to -NewName
runs in a child scope - see this answer for details.
Note that $script:i++
is a pragmatic alternative, but less flexible than the solution above - see the linked answer.
Upvotes: 0
Reputation:
Answered by @Theo in comment
"{0:D2}$Album.mxf"
so the variable $Album gets expanded.$i = 1
$Artist = " Name"
$Type = "Type"
$Location = "Loc"
$Month = "Month"
$Year = "2019"
$Album = "$Artist $Type $Location $Month $Year"
# Write-Host -ForegroundColor Green -Object $Album;
Get-ChildItem *.mxf | %{Rename-Item $_ -NewName ("{0:D2}$Album.mxf" -f $i++)}
Before:
After:
Upvotes: 0