You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell的Rename-Item cmdlet中引用数组元素重命名JSON文件

问题

我需要批量重命名带有en-US后缀的本地化.json文件,把后缀换成数组$array[$i][5]里对应的语言标识(比如法语对应fr.json),但在Rename-Item命令里正确引用数组时出了问题。

试了这段代码:

Get-ChildItem -filter *en-US.json -recurse | rename-item -newname {  $_.Name  -replace "^(.*?)en-US.json","`$1$array[$i][5]"  }

用双引号拼接时报错:

rename-item : 指定的路径、文件名或两者之一过长。完全限定的文件名必须少于260个字符,目录名必须少于248个字符。

换成+连接字符串又报另一个错:

Rename-Item : 参数'NewName'的脚本块输入失败。-ireplace运算符仅允许后跟两个元素,而非三个。

解决方案

问题出在PowerShell对双引号内数组表达式的解析上,直接写$array[$i][5]会被当成纯文本,而不是计算数组取值。可以用两种方法解决:

方法一:提前存储目标后缀

先把数组里的目标后缀存到变量里,再在替换时引用,代码更清晰:

# 先确认$i是正确的索引,比如i=0对应目标语言
$targetSuffix = $array[$i][5]
Get-ChildItem -Filter *en-US.json -Recurse | Rename-Item -NewName {
    $_.Name -replace '^(.*?)en-US\.json', "`$1$targetSuffix"
}

方法二:用子表达式计算数组值

在替换字符串里用$()包裹数组表达式,让PowerShell先计算出结果再插入:

Get-ChildItem -Filter *en-US.json -Recurse | Rename-Item -NewName {
    $_.Name -replace '^(.*?)en-US\.json', "`$1$($array[$i][5])"
}

注意点

  • 正则表达式里要把.转义成\.,不然会匹配任意字符,导致错误替换类似en-USx.json的文件。
  • 先确认$array[$i][5]能正确返回目标后缀(比如fr.json),可以先单独运行$array[$i][5]验证取值是否正确。

内容的提问来源于stack exchange,提问作者bom1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:50:58