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, we will be using Windows PowerShell with Regex.

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 tarxeta $ 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 is used on strings in 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

Deixar unha resposta