2

我正在尝试使用 a 的输出Get-Childitem | Where-Object来重命名一组文件,但不是用常量名称重命名我想用一组变量重命名,并且我使用运算符-replace来查找字符串中的位置是我想要改变。例子:

nane_01 -> name_23
name_02 -> name_24  they are not with the same final digit

这是我用于测试的代码:

$a = 0
$b = 1
$Na= 2
$Nb= 3
Get-Childitem | Where-Object {$_.name -match "_0[1-9]"} | rename-item -Newname { $_.name  -replace "_{0}{1}","_{2}{3}" -f $a++,$b++,$Na++,$Nb++ } -Whatif

我找不到如何使增量变量与-replace操作员一起工作

4

1 回答 1

2
  1. 明确指定变量的范围,否则每次调用重命名脚本块时都会丢弃本地副本。

  2. 运算符的搜索/替换字符串-replace是单独的参数,因此请使用括号将它们分别格式化(否则 PowerShell 将尝试应用于-f$_.name

$script:a = 0
$script:b = 1
$script:Na= 2
$script:Nb= 3

Get-Childitem | Where-Object {$_.name -match "_0[1-9]"} | rename-item -Newname {
    $_.name -replace ("_{0}{1}" -f $script:a++,$script:b++),
                     ("_{0}{1}" -f $script:Na++,$script:Nb++)
} -Whatif

或者只使用一个变量:

$script:n = 0

Get-Childitem | Where-Object {$_.name -match "_0[1-9]"} | rename-item -Newname {
    $_.name -replace ("_{0}{1}" -f $script:n++,$script:n++),
                     ("_{0}{1}" -f $script:n++,$script:n++)
} -Whatif
于 2016-09-04T23:38:18.610 回答