8

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

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

3 ответа3

20

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

C:\Users\John>set string=Abc_123

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

C:\Users\John>echo %string:~4,3%
123
0

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

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

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

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

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

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

0

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

Если вам не нравится язык PowerShell, есть Perl. Вы должны будете установить это на всех системах, хотя. Есть и другие тоже.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .