Como lote renomear parte do nome do ficheiro en Windows PowerShell utilizando expresión regular?

neste exemplo, temos 6 arquivos abaixo coa data eo nome do ficheiro embaixo:

Modo LastWriteTime lonxitude do nome
----                -------------         ------ ----
-a ----       10/06/2018     12:40              0 1 = 9.8.16 Declaración 298.67.pdf base
-A ----       10/06/2018     12:40              0 2 = 9.9.16 Declaración 134.74.pdf base
-A ----       10/06/2018     12:41              0 3 = 9.10.16 Declaración 123.43.pdf base
-A ----       10/06/2018     12:41              0 4 = 9.11.16 Declaración 134.54.pdf base
-A ----       10/06/2018     12:41              0 5 = 9.12.16 Declaración 157.98.pdf base
-A ----       10/06/2018     12:41              0 6 = 9.1.17 Declaración 123.45.pdf base

Aquí, o nome do ficheiro contén unha serie # ao comezo, seguido por =, seguido por 'extracto bancario’ seguido ata finais de equilibrio declaración.

Estes arquivos están en declaracións de tarxeta de crédito feito ea palabra 'Banco’ Debe ser substituída pola expresión 'Tarxeta de crédito'. Todo o resto do nome do ficheiro debe permanecer o mesmo.

Para acadar este, imos estar usando Windows PowerShell con expresión regular.

Para incluír todos os extractos bancarios, usan o ls mando, a continuación, o tubo de saída

lS | -newname ren {$_.name -replace('(.+)banco(.+)','$1Credit Card$2')}

A orde de cambio de nome se usa despois do tubo para renomear os ficheiros. $_ é o obxecto que contén a saída antes do tubo, e nós estamos usando a propiedade nome do $_ obxecto. -replace é utilizado en cordas en PowerShell, que substitúe unha cadea cunha nova secuencia. -replace é unha función que leva 2 parámetros. O 1º de parámetros é a antiga cadea que queremos substituír eo 2º parámetro é o novo cadea.

grupos na expresión regular capturar permítenos manter partes da cadea. en expresión regular, nada de poñer entre parénteses é capturado para usar máis tarde. eg. (.+)Bank(.+) captura algo antes e despois dos caracteres 'Banco'. Podemos utilizar estas pezas capturadas, usando $ e un número. O 1º paréntese captura en $1 ea 2ª paréntese captura en $2 etc…

No 1º parámetro, especificamos a antiga cadea que queremos substituír, e, á vez, captar as partes da cadea que desexe manter (captura). No 2º parámetro, a nova cadea usa as pezas capturadas que quere manter, así como a nova secuencia en si, por exemplo. '$1Credit Card$2'.

resultado:

Modo LastWrite Tempo Lonxitude Nome
----       ---------      ----            ------   ----
-a ----     10/06/2018     12:40              0 1 = 9.8.16 Tarxeta de crédito 298.67.pdf Declaración
-A ----     10/06/2018     12:40              0 2 = 9.9.16 Tarxeta de crédito 134.74.pdf Declaración
-A ----     10/06/2018     12:41              0 3 = 9.10.16 Tarxeta de crédito Declaración 123.43.pdf -a ----     10/06/2018     12:41              0 4 = 9.11.16 Tarxeta de crédito Declaración 134.54.pdf -a ----     10/06/2018     12:41              0 5 = 9.12.16 Tarxeta de crédito Declaración 157.98.pdf -a ----     10/06/2018     12:41              0 6 = 9.1.17 Tarxeta de crédito 123.45.pdf Declaración