5 votos

Cambiar el nombre múltiples archivos, parte del nombre del archivo de PowerShell

Estoy tratando de cambiar el nombre de varios archivos que tienen nombres de archivo terminan en la misma forma. Estos archivos están: "Foo Bar (U) (V7.9) (USA) .txt" "pocos Ber Doo Ber (U) (V7.9) (USA) .txt" ect

Estoy tratando de eliminar la sección "(U) (V7.9) (USA)" el nombre y reemplazar esta sección con (Estados Unidos). Estos archivos luego sería nombrados: "Foo Bar (USA).txt" "Pocos Ber Doo Ber (USA) .txt"

Absolutamente no puedo trabajar, pero aquí lo que he estado tratando sin éxito:

get-childItem '* (U) (V7.9) (USA).txt' | rename-item -newname { $_.name -replace '(U) (V7.9) (USA)','(USA)' }

7voto

Anthony Neace Puntos 319

Varios de los caracteres que usted está tratando de reemplazar caracteres especiales en regex. Tienen especial, reservado significados que permiten crear complicadas expresiones cuando no se "escapó." Con el fin de escapar de ellos, simplemente se debe incluir una barra invertida delante de los caracteres especiales. Ejemplo:

PS C:\> $string = "(U) (V7.9) (USA)"

#Failure
PS C:\> $string -replace "(U) (V7.9) (USA)", "(USA)"
(U) (V7.9) (USA)

#Success
PS C:\> $string -replace "\(U\) \(V7\.9\) \(USA\)", "(USA)"
(USA)

He aquí una de Powershell Regex de Referencia en el caso de ejecutar en problemas similares. Usted puede notar que el acento grave ` de caracteres se utiliza en lugar de la barra diagonal inversa -- el acento grave es el carácter de escape en powershell, pero eso no es cierto para todos los regex manejo .NET (que Powershell está construido sobre). Debido a eso, usted puede ver que tanto se utiliza en los ejemplos de regex para powershell en el internet.

2voto

Simone Puntos 381

Si solo quieres quitar "(U) (V7.9)" Parte, también se podría usar:

-replace("\(U\) \(V7.9\) ","")

Pero usted tiene que utilizar el escapecharacter para la parantheses demasiado. Y no olvides los siguientes spacecharacter, porque no queremos obtener una doublespace.

También hay una opción para utilizar el substring(start,length) Método. Pero no tienes que calcular el principio de la "(U) (V7.9)" Parte.

$string = "Randomname (U) (V7.9) (USA).txt"
$string.substring(0, $string.length - 20) + $string.substring($string.length - 9)

que las salidas Randomname (USA).txt.

El 20 es el número de caracteres (que comienza en el primer carácter de la cadena para quitar (en este caso: ( de (U)). El 9 es el número de caracteres (comenzando de nuevo) para el primer carácter después de la cadena para quitar (en este caso: ( de (USA), la causa no queremos conseguir un doble-espacio).

Este método es independiente de la Longitud de la Randomname, pero sólo funciona con posición conocida y la longitud de la cadena para quitar. De todos modos la -replace-es el Método más fácil de usar, si usted sabe la escapechararcter. Yo sólo quería hablar de otra forma de obtener el resultado deseado.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: