por que o Powershell me diz que meu arquivo representa um caminho quando tento renomeá-lo?

0

Eu tenho um nome de arquivo "+ 1.txt" que desejo renomear para "+ 2.txt"

Meu roteiro Powershell é:

$old = "\+1"
$new = "\+2"
Get-ChildItem | Rename-Item -NewName {$_.name -replace $old, $new }

Isso retorna:

powershell : Rename-Item : Cannot rename the specified target, because it represents a path

Como posso corrigir isso?

    
por user 18.03.2017 / 08:17

2 respostas

3

O caractere de escape correto no PowerShell é '(o caractere de retrocesso).

Por exemplo você escreveria o seguinte para obter uma string com uma nova linha:

$newline = "'n" 

Além disso, pelo menos em um teste, não precisei escapar. Então, apenas Rename-Item "+1.txt" "+2.txt" funcionou. Uma tentativa usando -replace exigiu a barra invertida no primeiro argumento, mas não no segundo. Então, $new = "+2" deve funcionar. A razão é que o primeiro argumento para -replace pode ser uma expressão regular. Portanto, o termo precisa de um literal + que não seja tratado especialmente. O segundo termo é handeled como uma string literal, então você não precisa de nenhum escape especial ou similar.

    
por 18.03.2017 / 08:53
0

-replace usa expressões regulares, mas você não precisa escapar manualmente dos caracteres.
Get-ChildItem itera todos os itens no caminho atual, você tem que especificar um nome

$old = "+1.txt"
$new = "+2.txt"
Get-ChildItem $old -file| 
  Rename-Item -NewName {$_.FullName -replace [regex]::escape($old), $new }

ou use um padrão where to -match .

$old = "+1.txt"
$new = "+2.txt"
Get-ChildItem | 
  where Name -match [regex]::escape($old)|
    Rename-Item -NewName $new 
    
por 18.03.2017 / 11:32