2011-06-25 49 views
2

我試圖重新命名某些文件,然後將它們複製到如下備份位置:重命名,然後複製不工作

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} 

的重命名部分工作正常。但重命名的文件不會被複制到備份位置。我在這裏做錯了什麼?

回答

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} 
+0

我喜歡這個答案,因爲這與我想達到的最接近。謝謝zdan。 – Animesh

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 } 
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" 
     } 
+3

重命名和副本不像搬家一樣。 –

1

一個內膽:

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

我喜歡這個,但我不想要一個'move-item'來完成我想要做的事情。感謝您的回答。 '-match'tmp_ \ d $'等價於'-match'tmp_ \ d {1} $'? – Animesh

+1

move-item用於重命名對象,而不是對同一任務使用兩個其他命令(複製和重命名)。順便說一下,你可以用copy來代替移動,它也應該可以工作。 'tmp_ \ d $'與'tmp_ \ d {1} $'相同,因爲它只匹配一個數字。 –

相關問題