在PowerShell中将字符串放在文件名之前

时间:2018-01-12 17:56:50

标签: powershell

我有以下代码:

get-childitem *.log | foreach { rename-item $_ $_.Name.Replace("", "backup ") }

我想备份.log文件,需要重命名。让我们假设看起来像 somefile.log ,我需要它们备份somefile.log 。基本上我需要插入" backup"在文件名之前跟一个空格。如果我尝试上面的脚本,它会给我"字符串的长度不能为0(零)"。

1 个答案:

答案 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