Tengo un nombre de archivo "+1.txt" que deseo cambiar a "+2.txt"
Mi script de Powershell es:
$old = "\+1"
$new = "\+2"
Get-ChildItem | Rename-Item -NewName {$_.name -replace $old, $new }
Esto devuelve:
powershell : Rename-Item : Cannot rename the specified target, because it represents a path
¿Cómo puedo corregir esto?
Respuesta1
El carácter de escape correcto en PowerShell es ` (la marca de verificación).
Por ejemplo, escribirías lo siguiente para obtener una cadena con una nueva línea:
$newline = "`n"
Además, al menos en una prueba, no necesitaba escapar de él. Así que Rename-Item "+1.txt" "+2.txt"
funcionó. Un intento de uso -replace
requería la barra invertida en el primer argumento, pero no en el segundo. Entonces $new = "+2"
debería funcionar. La razón es que el primer argumento -replace
podría ser una expresión regular. Entonces el término necesita un + literal que no se maneje de manera especial. El segundo término se maneja como una cadena literal, por lo que no necesita ningún escape especial o similar.
Respuesta2
-replace
utiliza expresiones regulares, pero no es necesario escapar manualmente de los caracteres.
Get-ChildItem itera todos los elementos en la ruta actual, debes especificar un nombre
$old = "+1.txt"
$new = "+2.txt"
Get-ChildItem $old -file|
Rename-Item -NewName {$_.FullName -replace [regex]::escape($old), $new }
o use un -match
patrón de dónde solo.
$old = "+1.txt"
$new = "+2.txt"
Get-ChildItem |
where Name -match [regex]::escape($old)|
Rename-Item -NewName $new