2011-01-04 02:42:12 +0000 2011-01-04 02:42:12 +0000
28
28

Come estrarre parte di una stringa in un file batch di Windows?

Supponiamo che io abbia un valore come “Abc_123” che è memorizzato in una variabile in un file batch (cmd). Voglio finire con una variabile che contiene solo “123”. C'è un modo integrato per farlo?

Non sono terribilmente esigente riguardo al metodo o alle prestazioni, purché sia integrato in un tipico sistema Windows (Vista/2008).

Risposte (4)

39
39
39
2011-01-04 02:58:22 +0000

Usate la sintassi della sottostringa:

C:\Users\John>set string=Abc_123

C:\Users\John>echo %string%
Abc_123

C:\Users\John>echo %string:~4,3%
123
7
7
7
2018-07-02 15:51:27 +0000

Se volete solo tutto dopo il trattino basso (e non sapete necessariamente la lunghezza della stringa o dove si trova il trattino basso, ma potete contare sul fatto che ci sia solo un trattino basso), provate:

for /f "tokens=2 delims=_" %%a in ("%STRING%") do (
  set AFTER_UNDERSCORE=%%a
)

Fondamentalmente, la tua stringa sarà divisa in token usando il trattino basso come delimitatore (delims=_). Solo il secondo (tokens=2) sarà passato (come variabile %%a) al ciclo for. Il ciclo verrà eseguito solo una volta poiché in questo caso si tratta di una singola stringa.

Se volete salvare le cose sia prima che dopo il trattino basso, provate:

for /f "tokens=1,2 delims=_" %%a in ("%STRING%") do (
  set BEFORE_UNDERSCORE=%%a
  set AFTER_UNDERSCORE=%%b
)

Notate che %%a è la variabile per il primo token della divisione; %%b è la variabile per il secondo token della divisione.

3
3
3
2011-01-04 03:14:44 +0000

Se trovate che il linguaggio batch non è abbastanza potente per fare ciò che volete - e probabilmente non vi ci vorrà molto per arrivare a quel punto - potete usare Windows PowerShell . Questo non è installato di default su tutte le versioni di Windows, ma potete scaricarlo gratuitamente.

Se non ti piace il linguaggio PowerShell, c'è Perl. Dovrete installarlo su tutti i sistemi, però. Ce ne sono anche altri.

1
1
1
2019-10-29 13:32:58 +0000
set var1=Abc_123
set var2=%var1:*_=%
echo %var2%