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 embutida de fazer isso?
Não sou muito exigente quanto ao método ou desempenho, desde que embutido em um sistema típico do Windows (Vista / 2008).
help set
como mencionado em Qual é a melhor maneira de fazer uma substring em um arquivo em lotes? no StackOverflow.%string:~%start%,%len%%
CALL
, comoCALL SET _substring=%%_donor:~%_startchar%,%_length%%%
Se você deseja apenas tudo após o sublinhado (e não sabe necessariamente o comprimento da string ou onde está o sublinhado, mas pode confiar na existência de apenas um sublinhado), tente:
Basicamente, sua string será dividida em tokens usando o sublinhado como delimitador (delims = _). Somente o segundo (tokens = 2) será passado (como variável %% a) para o loop for. O loop será executado apenas uma vez, já que você está lidando com uma única string.
Se você deseja salvar o material antes e depois do sublinhado, tente:
Observe que %% a é a variável para o primeiro token da divisão; %% b é a variável para o segundo token da divisão.
fonte
Se você achar que o idioma do lote não é poderoso o suficiente para fazer o que você deseja - e provavelmente não levará muito tempo para chegar a esse ponto - você poderá usar o Windows PowerShell . Por padrão, não está instalado em todas as versões do Windows, mas você pode baixá-lo gratuitamente.
Se você não gosta da linguagem do PowerShell, existe o Perl. Você precisará instalá-lo em todos os sistemas. Existem outros também.
fonte
fonte
*
ganancioso? Eu usei um bom velhoIF NOT ... GOTO :replace
, mas seria bom se houvesse uma maneira melhor._
existem, então passe para o último, entãoset var