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

Wie extrahiere ich einen Teil einer Zeichenkette in einer Windows-Batch-Datei?

Angenommen, ich habe einen Wert wie “Abc_123”, der in einer Variablen in einer Batch-Datei (cmd) gespeichert ist. Ich möchte am Ende eine Variable haben, die nur “123” enthält. Gibt es eine integrierte Möglichkeit, dies zu tun?

Ich bin nicht sonderlich wählerisch, was die Methode oder die Leistung angeht, solange sie in ein typisches Windows-System (Vista/2008) eingebaut ist.

Antworten (4)

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

Verwenden Sie die Teilstring-Syntax:

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

Wenn Sie nur alles nach dem Unterstrich haben wollen (und nicht unbedingt die Länge der Zeichenkette oder die Position des Unterstrichs kennen, sondern sich darauf verlassen können, dass es nur einen Unterstrich gibt), versuchen Sie es:

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

Grundsätzlich wird Ihre Zeichenkette in Token aufgeteilt, wobei der Unterstrich als Begrenzer verwendet wird (delims=_). Nur das zweite (tokens=2) wird (als Variable %%a) an die for-Schleife übergeben. Die Schleife wird nur einmal durchlaufen, da es sich in diesem Fall um eine einzelne Zeichenkette handelt.

Wenn Sie das Zeug sowohl vor als auch nach dem Unterstrich speichern wollen, versuchen Sie es:

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

Beachten Sie, dass %%a die Variable für das erste Token des Splits ist; %%b ist die Variable für das zweite Token des Splits.

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

Wenn Sie feststellen, dass die Batch-Sprache nicht leistungsfähig genug ist, um das zu tun, was Sie wollen - und es wird wahrscheinlich nicht allzu lange dauern, bis Sie an diesen Punkt kommen - können Sie die Windows PowerShell verwenden. Diese ist nicht standardmäßig auf allen Versionen von Windows installiert, aber Sie können sie kostenlos herunterladen.

Wenn Sie die PowerShell-Sprache nicht mögen, gibt es Perl. Das müssen Sie allerdings auf allen Systemen installieren. Es gibt auch noch andere.

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