重命名然后复制不起作用

时间:2011-06-25 17:43:44

标签: powershell

我正在尝试重命名某些文件,然后将它们复制到备份位置,如下所示:

gci $src `
    | ?{!$_.psiscontainer -and $_.extension.length -eq 0 -and $_ -match "tmp_\d{1}$"} `
    | %{ ren -path $_.fullname -new ($_.name + ".ext") } `
    | %{ cpi -path $_.fullname -dest $bkup -force} 

重命名部分工作正常。但重命名的文件不会被复制到备份位置。我在这里做错了什么?

4 个答案:

答案 0 :(得分:4)

Rename-Item不会返回任何内容,因此没有任何内容可以传递给Copy-Item。您可以将两个命令放在每个块中:

gci $src `
    | ?{!$_.psiscontainer -and $_.extension.length -eq 0 -and $_ -match "tmp_\d{1}$"} `
    | %{ $renamedPath = $_.FullName + ".ext"; `
         ren -path $_.FullName -new $renamedPath; `
         cpi -path $renamedPath -dest $bkup -force }

答案 1 :(得分:2)

您可以使用move-item在一个操作中完成这两项操作。

gci $src 
    | ?{!$_.psiscontainer -and $_.extension.length -eq 0 -and $_ -match "tmp_\d{1}$"} 
    | %{
         $newname = $_.Name + ".ext"
         move-item -path $_.FullName -dest "$bkup\$newname"
         }

答案 2 :(得分:2)

默认情况下,重命名的项目不会被推回到管道上,使用-PassThru开关传递它们:

gci $src `
    | ?{!$_.psiscontainer -and $_.extension.length -eq 0 -and $_ -match "tmp_\d{1}$"} `
    | %{ ren -path $_.fullname -new ($_.name + ".ext") -PassThru } `
    | %{ cpi -path $_.fullname -dest $bkup -force} 

答案 3 :(得分:1)

一个班轮:

gci $src | ?{!$_.psiscontainer -and !$_.extension -and $_ -match 'tmp_\d$'} | move-item -dest {"$bkup\$($_.Name + '.ext')"}