Como lote renomear parte do nome do arquivo no Windows PowerShell usando Regex?

Neste exemplo, temos 6 arquivos abaixo com a data eo nome do arquivo abaixo:

Modo LastWriteTime comprimento do nome
----                -------------         ------ ----
-uma----       10/06/2018     12:40              0 1 = 9.8.16 Declaração 298.67.pdf banco
-uma----       10/06/2018     12:40              0 2 = 9.9.16 Declaração 134.74.pdf banco
-uma----       10/06/2018     12:41              0 3 = 9.10.16 Declaração 123.43.pdf banco
-uma----       10/06/2018     12:41              0 4 = 9.11.16 Declaração 134.54.pdf banco
-uma----       10/06/2018     12:41              0 5 = 9.12.16 Declaração 157.98.pdf banco
-uma----       10/06/2018     12:41              0 6 = 9.1.17 Declaração 123.45.pdf banco

Aqui, o nome do ficheiro contém uma série # no inicio, seguido por =, seguido por ‘extrato bancário’ seguido até o final de equilíbrio declaração.

Esses arquivos estão em declarações de cartão de crédito fato e a palavra ‘Banco’ precisa ser substituída pela expressão ‘Cartão de Crédito’. Todo o resto do nome do arquivo deve permanecer o mesmo.

Para atingir este, iremos utilizar Windows PowerShell com Regex.

Para listar todos os extratos bancários, nós usamos o ls comando, em seguida, o tubo de saída

ls | -newname ren {$_.name -replace('(.+)Banco(.+)','$ 1Credit cartão $ 2')}

O comando de mudança de nome é usado após o tubo para renomear os arquivos. $_ é o objeto que contém a saída antes do tubo, e nós estamos usando a propriedade nome do $_ objeto. -replace é utilizado em cordas em PowerShell, que substitui uma string com uma nova seqüência. -replace é uma função que leva 2 parâmetros. O 1º parâmetro é a antiga cadeia que queremos substituir eo 2º parâmetro é a nova cadeia.

grupos na Regex capturar permite-nos manter partes da cadeia. em Regex, nada de colocar entre parênteses é capturado para usar mais tarde. eg. (.+)Bank(.+) captura qualquer coisa antes e depois dos caracteres ‘Banco’. Podemos usar estas peças capturadas, usando $ e um número. O 1º parêntese captura em $1 ea 2ª parêntese captura em $2 etc…

No 1º parâmetro, especificamos a antiga cadeia que queremos substituir, e, ao mesmo tempo, captar as partes da cadeia que deseja manter (capturar). No 2º parâmetro, a nova string usa as peças capturadas que deseja manter, bem como a nova seqüência em si, por exemplo. '$1Credit Card$2'.

Resultado:

Modo LastWrite Tempo Comprimento Nome
----       ---------      ----            ------   ----
-uma----     10/06/2018     12:40              0 1 = 9.8.16 Cartão de Crédito 298.67.pdf Declaração
-uma----     10/06/2018     12:40              0 2 = 9.9.16 Cartão de Crédito 134.74.pdf Declaração
-uma----     10/06/2018     12:41              0 3 = 9.10.16 Cartão de Crédito Declaração 123.43.pdf -a ----     10/06/2018     12:41              0 4 = 9.11.16 Cartão de Crédito Declaração 134.54.pdf -a ----     10/06/2018     12:41              0 5 = 9.12.16 Cartão de Crédito Declaração 157.98.pdf -a ----     10/06/2018     12:41              0 6 = 9.1.17 Cartão de Crédito 123.45.pdf Declaração

Deixar uma resposta