重命名项目驱动器


Invoke-Command -ComputerName comp1,comp2 -ScriptBlock {Get-ChildItem F:sktest*.txt | ForEach-Object{
$a=$_.fullname
$b=$a.Substring(0,($a.Length-4))+"_old.txt" | %{
   Rename-Item -path $a -NewName $b}
}}

在使用上面的代码重命名文件(例如ABC.TXT到ABC_OLD.TXT)时,PowerShell将"不能将参数绑定到参数为'newname',因为它为null。"错误。

当我在上一条管道之前打印$ a和$ b的结果时,结果将如预期的那样出现。但是,最后,它的命名cmdlet失败了。请让我了解我在这里做的错误。

您不需要第二个foreach块。(删除 - what for有效重命名文件)

Get-ChildItem c:temp*.txt | ForEach-Object{
    $a=$_.fullname
    $b=$a.Substring(0,($a.Length-4))+"_old.txt" 
    Rename-Item -path $a -NewName $b -whatif
}

如前所述,还有一个额外的句子。我建议不要尝试将命令塞入一行。在保留输入对象,而不是将其更改为字符串时,$ b也更容易再现。基本上,如果c: someworkingdir myfile.longextension是他重命名的目标,则代码将中断。以下说明了以前提到的项目。

$Path = C:SomeWorkingDir
Get-ChildItem $Path |
ForEach-Object {
    $a = $_.fullname
    $b = $_.BaseName + "_old.txt"
    Rename-Item -path $a -NewName $b
} # end foreach. Also end Get-ChildItem

相关内容

最新更新