Come rinominare in batch parte del nome del file in Windows PowerShell utilizzando Regex?

In questo esempio, noi abbiamo 6 file sotto con la data e il nome di seguito:

Modalità LastWriteTime lunghezza del nome
----                -------------         ------ ----
-un----       10/06/2018     12:40              0 1 = 9.8.16 Estratto conto 298.67.pdf
-un----       10/06/2018     12:40              0 2 = 9.9.16 Estratto conto 134.74.pdf
-un----       10/06/2018     12:41              0 3 = 9.10.16 Estratto conto 123.43.pdf
-un----       10/06/2018     12:41              0 4 = 9.11.16 Estratto conto 134.54.pdf
-un----       10/06/2018     12:41              0 5 = 9.12.16 Estratto conto 157.98.pdf
-un----       10/06/2018     12:41              0 6 = 9.1.17 Estratto conto 123.45.pdf

Qui, il nome contiene una serie # all'inizio, seguita da =, seguito da ‘Estratto conto bancario’ seguita dalla fine di equilibrio dichiarazione.

Questi file sono in estratti conto della carta di credito e infatti la parola ‘Bank’ deve essere sostituito da ‘carta di credito’. Tutto il resto del nome del file dovrebbe rimanere lo stesso.

Al fine di raggiungere questo obiettivo, useremo Finestre PowerShell con Regex.

Per elencare tutti gli estratti conto bancari, noi usiamo il ls comando, poi pipe l'output

ls | -NewName ren {$_.name -replace('(.+)Banca(.+)','$ 1Credit carta $ 2')}

Il comando rename viene utilizzato dopo il tubo per rinominare i file. $_ è l'oggetto che mantiene l'uscita prima che il tubo, e che stiamo usando la proprietà nome del $_ oggetto. -replace è usato su stringhe in PowerShell, che sostituisce una stringa con una nuova stringa. -replace è una funzione che prende 2 parametri. Il primo parametro è la vecchia stringa che vogliamo sostituire e il 2 ° parametro è la nuova stringa.

Catturare gruppi in Regex ci permette di mantenere parti della stringa. in Regex, nulla di mettere tra parentesi viene catturato da utilizzare in seguito. es. (.+)Bank(.+) cattura qualsiasi cosa prima e dopo i caratteri ‘Banca’. Possiamo usare queste parti catturati, usando $ e un numero. La prima parentesi cattura in $1 e il 2 ° tra parentesi cattura in $2 eccetera…

Nel 1 ° parametro, specifichiamo la vecchia stringa che vogliamo sostituire, e allo stesso tempo abbiamo catturare le parti della stringa che vogliamo mantenere (catturare). Nel 2 ° parametro, la nuova stringa utilizza le parti catturati che vogliamo mantenere, nonché la nuova stringa stessa es. '$1Credit Card$2'.

Risultato:

Modalità LastWrite Tempo lunghezza del nome
----       ---------      ----            ------   ----
-un----     10/06/2018     12:40              0 1 = 9.8.16 Carta di credito 298.67.pdf
-un----     10/06/2018     12:40              0 2 = 9.9.16 Carta di credito 134.74.pdf
-un----     10/06/2018     12:41              0 3 = 9.10.16 Carta di credito 123.43.pdf -a ----     10/06/2018     12:41              0 4 = 9.11.16 Carta di credito 134.54.pdf -a ----     10/06/2018     12:41              0 5 = 9.12.16 Carta di credito 157.98.pdf -a ----     10/06/2018     12:41              0 6 = 9.1.17 Carta di credito 123.45.pdf

lascia un commento