Hur man batch byta namn på en del av filnamnet i Windows Powershell med hjälp av Regex?

I detta exempel, vi har 6 filer nedan med datum och filnamn nedan:

Läge LastWriteTime Längd Namn
----                -------------         ------ ----
-en----       10/06/2018     12:40              0 1 = 9.8.16 Kontoutdrag 298.67.pdf
-en----       10/06/2018     12:40              0 2 = 9.9.16 Kontoutdrag 134.74.pdf
-en----       10/06/2018     12:41              0 3 = 9.10.16 Kontoutdrag 123.43.pdf
-en----       10/06/2018     12:41              0 4 = 9.11.16 Kontoutdrag 134.54.pdf
-en----       10/06/2018     12:41              0 5 = 9.12.16 Kontoutdrag 157.98.pdf
-en----       10/06/2018     12:41              0 6 = 9.1.17 Kontoutdrag 123.45.pdf

Här, filnamnet innehåller en seriell # i början, följt av =, följt av ’kontoutdrag’ följt av i slutet av meddelandet balans.

Filerna är i själva verket kreditkortsutdrag och ordet ’Bank’ måste ersättas med orden ’kreditkort’. Resten av filnamnet bör förbli densamma.

För att uppnå detta, Vi kommer att använda Windows Power med Regex.

För att lista alla kontoutdrag, vi använder ls kommando, då röret utsignalen

ls | ren -newname {$_.name -replace('(.+)Bank(.+)','$ 1Credit kort $ 2')}

Byt namn på kommando används efter röret för att byta namn på filerna. $_ är det objekt som håller utsignalen innan röret, och vi använder namnet egendom $_ objekt. -replace används på strängar i Power, som ersätter en sträng med en ny sträng. -replace är en funktion som tar 2 parametrar. Den 1: a parametern är gamla sträng som vi vill ersätta och den 2: a parametern är den nya strängen.

Fånga grupper i Regex tillåter oss att hålla delar av strängen. i Regex, något sätta inom parentes fångas att använda senare. t.ex.. (.+)Bank(.+) fångar något före och efter tecken ’bank’. Vi kan använda dessa fångade delar, genom att använda $ och ett antal. Den 1: a parentes fångar in $1 och 2:e parentes fångar in $2 etc…

I 1: a parameter, Vi anger den gamla sträng som vi vill ersätta, och på samma gång vi fånga delar av strängen som vi vill behålla (fånga). I 2: a parameter, den nya strängen använder fångade delar som vi vill behålla, liksom den nya strängen själv t.ex.. '$1Credit Card$2'.

Resultat:

Läge LastWrite tidslängd Namn
----       ---------      ----            ------   ----
-en----     10/06/2018     12:40              0 1 = 9.8.16 Kontoutdrag 298.67.pdf
-en----     10/06/2018     12:40              0 2 = 9.9.16 Kontoutdrag 134.74.pdf
-en----     10/06/2018     12:41              0 3 = 9.10.16 Kontoutdrag 123.43.pdf -a ----     10/06/2018     12:41              0 4 = 9.11.16 Kontoutdrag 134.54.pdf -a ----     10/06/2018     12:41              0 5 = 9.12.16 Kontoutdrag 157.98.pdf -a ----     10/06/2018     12:41              0 6 = 9.1.17 Kontoutdrag 123.45.pdf

Lämna ett svar