Como extrair parte de uma string no arquivo de lote do Windows?

6

Suponha que eu tenha um valor como "Abc_123" armazenado em uma variável em um arquivo em lotes (cmd). Eu quero acabar com uma variável que contém apenas "123". Existe alguma maneira de fazer isso?

Eu não sou muito exigente quanto ao método, ou desempenho, desde que seja integrado a um sistema Windows (Vista / 2008) típico.

    
por Ken 04.01.2011 / 03:42

3 respostas

17

Use a sintaxe de substring:

C:\Users\John>set string=Abc_123

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

C:\Users\John>echo %string:~4,3%
123
    
por 04.01.2011 / 03:58
0

Se você achar que o idioma do lote não é poderoso o suficiente para fazer o que você quer - e provavelmente não levará muito tempo para chegar a esse ponto - você pode usar o Windows PowerShell . Isso não é instalado por padrão em todas as versões do Windows, mas você pode baixá-lo gratuitamente.

Se você não gosta da linguagem do PowerShell, há o Perl. Você terá que instalar isso em todos os sistemas embora. Existem outros também.

    
por 04.01.2011 / 04:14
0

Se você quiser apenas tudo após o sublinhado (e não necessariamente conhecer o comprimento da string ou onde o sublinhado é, mas pode confiar em que haja apenas um sublinhado), tente:

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

Basicamente, sua string será dividida em tokens usando o sublinhado como um delimitador (delims = _). Apenas o segundo (tokens = 2) será passado (como variável %% a) para o loop for. O loop só será executado uma vez desde que você esteja lidando com uma única string nesse caso.

Se você quiser salvar as coisas antes e depois do sublinhado, tente:

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

Observe que %% a é a variável do primeiro token da divisão; %% b é a variável do segundo token da divisão.

    
por 02.07.2018 / 17:51