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

Hoe een deel van een string uitpakken in een Windows batch file?

Stel, ik heb een waarde zoals “Abc_123” die is opgeslagen in een variabele in een batch (cmd) bestand. Ik wil eindigen met een variabele die alleen “123” bevat. Is er een ingebouwde manier om dit te doen?

Ik ben niet erg kieskeurig over de methode, of prestatie, zolang het maar ingebouwd is in een typisch Windows (Vista/2008) systeem.

Antwoorden (4)

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

Gebruik de substring syntaxis:

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

Als u alleen alles na de underscore wilt hebben (en niet noodzakelijkerwijs de lengte van de tekenreeks weet of waar de underscore staat, maar erop kunt vertrouwen dat er slechts één underscore is), probeer dan:

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

In principe wordt uw tekenreeks opgesplitst in tokens met de underscore als scheidingsteken (delims=_). Alleen de tweede (tokens=2) wordt doorgegeven (als variabele %%a) aan de for-lus. De lus wordt maar één keer uitgevoerd, omdat het in dit geval om één enkele string gaat.

Als je het spul zowel voor als na de underscore wilt opslaan, probeer dan:

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

Merk op dat %%a de variabele is voor het eerste teken van de splitsing; %%b is de variabele voor het tweede teken van de splitsing.

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

Als u vindt dat de batch-taal niet krachtig genoeg is om te doen wat u wilt - en het zal waarschijnlijk niet lang duren voor u zover bent - kunt u de Windows PowerShell gebruiken. Dit is niet standaard geïnstalleerd op alle versies van Windows, maar je kunt het gratis downloaden.

Als je niet van de PowerShell taal houdt, is er Perl. Dat moet je wel op alle systemen installeren. Er zijn ook andere talen.

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