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

Как извлечь часть строки в пакетном файле Windows?

Предположим, у меня есть такое значение, как “Abc_123”, которое хранится в переменной в пакетном (командном) файле. Я хочу получить переменную, которая содержит только “123”. Есть ли встроенный способ сделать это?

Я не очень придирчив к этому методу или производительности, если он встроен в типичную систему Windows (Vista/2008).

Ответы (4)

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

Используйте синтаксис подстроек:

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

Если вы хотите, чтобы все было только после подчеркивания (и не обязательно знаете длину строки или место, где находится подчеркивание, но можете полагаться на то, что есть только одно подчеркивание), попробуйте:

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

В основном, ваша строка будет разделена на маркеры, используя в качестве разделителя символ подчеркивания (разделитель=_). В цикл for будет передана только вторая (tokens=2) (как переменная %%a). Цикл будет выполняться только один раз, так как в данном случае речь идет об одной строке.

Если вы хотите сохранить вещи как до, так и после подчеркивания, попробуйте:

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

Обратите внимание, что %%a - переменная для первой лексемы сплита; %%b - переменная для второй лексемы сплита.

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

Если вы обнаружили, что пакетный язык недостаточно мощный для того, чтобы делать то, что вы хотите - и это, скорее всего, не займет у вас слишком много времени, - вы можете использовать Windows PowerShell . По умолчанию он установлен не на всех версиях Windows, но вы можете скачать его бесплатно.

Если вам не нравится язык PowerShell, есть Perl. Однако вам придется установить его на все системы. Есть и другие.

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