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

Jak wyodrębnić część ciągu znaków w pliku wsadowym Windows?

Załóżmy, że mam wartość taką jak “Abc_123”, która jest przechowywana w zmiennej w pliku wsadowym (cmd). Chcę skończyć z zmienną, która zawiera tylko “123”. Czy istnieje jakiś wbudowany sposób, aby to zrobić?

Nie jestem strasznie wybredny co do metody lub wydajności, tak długo jak jest to wbudowane w typowy system Windows (Vista/2008).

Odpowiedzi (4)

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

Użyj składni podłańcuchowej:

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

Jeśli chcesz tylko wszystko po podkreślniku (i niekoniecznie znasz długość łańcucha lub gdzie jest podkreślnik, ale możesz polegać na tym, że jest tylko jeden podkreślnik), spróbuj:

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

Zasadniczo twój ciąg znaków zostanie podzielony na tokeny przy użyciu podkreślnika jako ogranicznika (delims=_). Tylko drugi z nich (tokens=2) zostanie przekazany (jako zmienna %%a) do pętli for. Pętla zostanie uruchomiona tylko raz, ponieważ w tym przypadku mamy do czynienia z pojedynczym łańcuchem znaków.

Jeśli chcesz zapisać rzeczy zarówno przed jak i po podkreślniku, spróbuj:

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

Zauważ, że %%a jest zmienną dla pierwszego tokena podziału; %%b jest zmienną dla drugiego tokena podziału.

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

Jeśli stwierdzisz, że język wsadowy nie jest wystarczająco wydajny, aby zrobić to, co chcesz - a dojście do tego punktu prawdopodobnie nie zajmie ci zbyt wiele czasu - możesz użyć Windows PowerShell . Nie jest on domyślnie zainstalowany we wszystkich wersjach systemu Windows, ale można go pobrać bezpłatnie.

Jeśli nie podoba ci się język PowerShell, możesz użyć Perla. Trzeba go jednak zainstalować na wszystkich systemach. Są też inne.

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