如何在powershell中的-Newname中包含变量
How to include variable in -Newname in powershell
通过 power-shell 脚本,尝试将 $Album 变量添加到命名序列中。
已尝试写入主机,变量正在运行。尝试过 () [] {} "" '' 之类的东西。等等
目标是让$Album
在下面这一行工作:{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++)}
之前:
- 杂项名称 - 1.mxf
- 杂项名称 - 4.mxf
- 杂项名称 - 6.mxf
当前:
- 01$Album.mxf
- 02$Album.mxf
- 03$Album.mxf
目标:
- 01 姓名类型 Loc 月份 2019.mxf
- 02 姓名类型 Loc 月份 2019.mxf
- 03 姓名类型 Loc 月份 2019.mxf
@Theo 在评论中回答
- 在此处使用 double-quotes
"{0:D2}$Album.mxf"
以便扩展变量 $Album。
$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++)}
之前:
- 杂项名称 - 1.mxf
- 杂项名称 - 4.mxf
- 杂项名称 - 6.mxf
之后:
- 01 姓名类型 Loc 月份 2019.mxf
- 02 姓名类型 Loc 月份 2019.mxf
- 03 姓名类型 Loc 月份 2019.mxf
或者像这样(在交互式会话和脚本中都有效)。你想要 space 在 $album
.
之前
Get-ChildItem *.mxf | Rename-Item -NewName { "{0:D2} $Album.mxf" -f $script:i++ }
编辑:还有另一种方法。鲜为人知的是 foreach-object 可以占用 3 个脚本块 (begin/process/end)。 -process 可以采用记录的脚本块数组。你总是可以用 -whatif.
测试这些东西
Get-ChildItem *.mxf |
foreach { $i = 1 } { Rename-Item $_ -NewName ("{0:D2} $Album.mxf" -f $i++) -whatif }
有效,但有两点尴尬:
它混合了可扩展字符串("..."
内的字符串插值)和template-based字符串格式 通过 -f
运算符。
它使用%
(ForEach-Object
)为每个输入对象启动Rename-Item
,效率很低.
这是一个提供补救措施的解决方案,通过始终如一地使用 -f
并使用 :
$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 }
注意使用 ([ref] $i).Value++
增加 $i
的值,这是必要的,因为传递给 -NewName
的 delay-bind 脚本块在 子作用域 - 有关详细信息,请参阅。
请注意,$script:i++
是一种实用的替代方案,但不如上面的解决方案灵活 - 请参阅链接的答案。
通过 power-shell 脚本,尝试将 $Album 变量添加到命名序列中。
已尝试写入主机,变量正在运行。尝试过 () [] {} "" '' 之类的东西。等等
目标是让$Album
在下面这一行工作:{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++)}
之前:
- 杂项名称 - 1.mxf
- 杂项名称 - 4.mxf
- 杂项名称 - 6.mxf
当前:
- 01$Album.mxf
- 02$Album.mxf
- 03$Album.mxf
目标:
- 01 姓名类型 Loc 月份 2019.mxf
- 02 姓名类型 Loc 月份 2019.mxf
- 03 姓名类型 Loc 月份 2019.mxf
@Theo 在评论中回答
- 在此处使用 double-quotes
"{0:D2}$Album.mxf"
以便扩展变量 $Album。
$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++)}
之前:
- 杂项名称 - 1.mxf
- 杂项名称 - 4.mxf
- 杂项名称 - 6.mxf
之后:
- 01 姓名类型 Loc 月份 2019.mxf
- 02 姓名类型 Loc 月份 2019.mxf
- 03 姓名类型 Loc 月份 2019.mxf
或者像这样(在交互式会话和脚本中都有效)。你想要 space 在 $album
.
Get-ChildItem *.mxf | Rename-Item -NewName { "{0:D2} $Album.mxf" -f $script:i++ }
编辑:还有另一种方法。鲜为人知的是 foreach-object 可以占用 3 个脚本块 (begin/process/end)。 -process 可以采用记录的脚本块数组。你总是可以用 -whatif.
测试这些东西Get-ChildItem *.mxf |
foreach { $i = 1 } { Rename-Item $_ -NewName ("{0:D2} $Album.mxf" -f $i++) -whatif }
它混合了可扩展字符串(
"..."
内的字符串插值)和template-based字符串格式 通过-f
运算符。它使用
%
(ForEach-Object
)为每个输入对象启动Rename-Item
,效率很低.
这是一个提供补救措施的解决方案,通过始终如一地使用 -f
并使用
$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 }
注意使用 ([ref] $i).Value++
增加 $i
的值,这是必要的,因为传递给 -NewName
的 delay-bind 脚本块在 子作用域 - 有关详细信息,请参阅
请注意,$script:i++
是一种实用的替代方案,但不如上面的解决方案灵活 - 请参阅链接的答案。