Wie extrahiere ich einen Teil einer Zeichenfolge in einer Windows-Batchdatei?

29

Angenommen, ich habe einen Wert wie "Abc_123", der in einer Variablen in einer Batch-Datei (cmd) gespeichert ist. Ich möchte mit einer Variablen enden, die nur "123" enthält. Gibt es eine eingebaute Möglichkeit, dies zu tun?

Ich bin nicht besonders wählerisch in Bezug auf die Methode oder Leistung, solange sie in ein typisches Windows-System (Vista / 2008) integriert ist.

Ken
quelle

Antworten:

40

Verwenden Sie die Teilzeichenfolgensyntax:

C:\Users\John>set string=Abc_123

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

C:\Users\John>echo %string:~4,3%
123
John T.
quelle
4
Sie können die vollständige Syntax sehen, help setwie unter Was ist der beste Weg, um einen Teilstring in einer Batch-Datei zu erstellen? auf StackOverflow.
User5910
1
Wenn ich diese 4 und 3 als variable Eingänge benötigen würde, wie würde ich das tun? %string:~%start%,%len%%
MakPo
keine Ursache. Ich habe die Antwort gefunden. ss64.com/nt/syntax-substring.html
MakPo
3
Um den Link von @MakPo zusammenzufassen: benutze CALL, wieCALL SET _substring=%%_donor:~%_startchar%,%_length%%%
bugybunny
7

Wenn Sie nur alles nach dem Unterstrich haben möchten (und nicht unbedingt die Länge der Zeichenfolge oder die Position des Unterstrichs kennen, sich aber darauf verlassen können, dass nur ein Unterstrich vorhanden ist), versuchen Sie Folgendes:

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

Grundsätzlich wird Ihre Zeichenfolge unter Verwendung des Unterstrichs als Trennzeichen in Token aufgeteilt (delims = _). Nur der zweite (Token = 2) wird (als Variable %% a) an die for-Schleife übergeben. Die Schleife wird nur einmal ausgeführt, da es sich in diesem Fall um eine einzelne Zeichenfolge handelt.

Wenn Sie das Material sowohl vor als auch nach dem Unterstrich speichern möchten, versuchen Sie Folgendes:

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 Split ist. %% b ist die Variable für das zweite Token des Split.

DocOc
quelle
3

Wenn Sie feststellen, dass die Batch-Sprache nicht leistungsfähig genug ist, um das zu tun, was Sie möchten - und es wahrscheinlich nicht zu lange dauert, bis Sie diesen Punkt erreichen -, können Sie die Windows PowerShell verwenden . Dies ist nicht standardmäßig auf allen Windows-Versionen installiert, Sie können es jedoch kostenlos herunterladen.

Wenn Ihnen die PowerShell-Sprache nicht gefällt, gibt es Perl. Sie müssen dies jedoch auf allen Systemen installieren. Es gibt auch andere.

Wayne Johnston
quelle
Die Frage ist nicht nach Powershell oder Perl
Zimba
1
set var1=Abc_123
set var2=%var1:*_=%
echo %var2%
Zimba
quelle
3
Was macht das konkret?
Pimp Juice IT
Es beantwortet die Frage: "Angenommen, ich habe einen Wert wie" Abc_123 ", der in einer Variablen in einer Batch-Datei (cmd) gespeichert ist. Ich möchte eine Variable erhalten, die nur" 123 "enthält. Ist eine Variable integriert? Ich bin nicht besonders wählerisch in Bezug auf die Methode oder Leistung, solange sie in ein typisches Windows-System (Vista / 2008) integriert ist. " Ich habe dies auf Win 10
Zimba
Oh, wenn Sie gefragt haben, wie dieser Code funktioniert: Er entfernt alles vor der Nummer, gefolgt von einem Unterstrich.
Zimba
@Zimba gibt es eine Möglichkeit, dies einfach auf "last _" zu erweitern? Wo finde ich das auch in einer Dokumentation?
TWiStErRob
1
@ TWiStErRob: Ich verstehe. Wenn Sie nicht wissen, wie viele _es gibt, dann schleifen Sie zum letzten, dannset var
Zimba