Переименовать, а затем скопировать не работает - PullRequest
2 голосов
/ 25 июня 2011

Я пытаюсь переименовать определенные файлы, а затем скопировать их в папку для резервного копирования, как показано ниже:

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 ]

4 голосов
/ 25 июня 2011

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 голосов
/ 26 июня 2011

По умолчанию переименованные элементы не будут возвращаться в конвейер, используйте ключ -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} 
2 голосов
/ 25 июня 2011

Вы выполняете оба в одной операции с 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"
         }
1 голос
/ 26 июня 2011

Один лайнер:

gci $src | ?{!$_.psiscontainer -and !$_.extension -and $_ -match 'tmp_\d$'} | move-item -dest {"$bkup\$($_.Name + '.ext')"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...