我有以下代码:
get-childitem *.log | foreach { rename-item $_ $_.Name.Replace("", "backup ") }
我想备份.log文件,需要重命名。让我们假设看起来像 somefile.log ,我需要它们备份somefile.log 。基本上我需要插入" backup"在文件名之前跟一个空格。如果我尝试上面的脚本,它会给我"字符串的长度不能为0(零)"。
答案 0 :(得分:2)
为此,我建议使用.NET String格式,以帮助您构建新文件名。可以把它想象成模板字符串,但是你要将-f
运算符右侧的值替换为左侧字符串上的位置0。
Get-ChildItem -Path *.log |
ForEach-Object -Process {
$NewName = 'backup {0}' -f $PSItem.Name
Rename-Item -Path $PSItem -NewName $NewName
}
您获取异常消息的原因是Replace()
方法要求您指定非零长度字符串作为其第一个参数。在您的示例中,您传入了一个零长度的字符串,因此您将收到例外。
重要:$PSItem
变量是$_
的别名,仅适用于PowerShell v3.0及更高版本。使用$PSVersionTable
检查当前正在运行的PowerShell版本。
有关$PSItem
的详细信息,请参阅此文档:
Get-Help -Name about_Automatic_Variables