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

Como extrair parte de uma cadeia no ficheiro de lote do Windows?

Suponha que tenho um valor como “Abc_123” que é armazenado numa variável num ficheiro de lote (cmd). Quero terminar com uma variável que contenha apenas “123”. Existe alguma forma integrada para o fazer?

Não sou muito exigente quanto ao método, ou desempenho, desde que esteja integrado num sistema Windows típico (Vista/2008).

Respostas (4)

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

Utilizar a sintaxe do substrato:

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

Se só quer tudo depois do sublinhado (e não sabe necessariamente o comprimento da corda ou onde está o sublinhado, mas pode confiar na existência de apenas um sublinhado), tente:

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

Basicamente, a sua corda será dividida em fichas utilizando o sublinhado como delimitador (delims=_). Apenas o segundo (fichas=2) será passado (como variável %%a) para o for loop. O laço só funcionará uma vez, uma vez que neste caso se trata de uma única cadeia de caracteres.

Se quiser guardar o material tanto antes como depois do sublinhado, tente:

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

Note que %%a é a variável para a primeira ficha da divisão; %%b é a variável para a segunda ficha da divisão.

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

Se descobrir que a linguagem de lote não é suficientemente poderosa para fazer o que deseja - e provavelmente não demorará muito tempo a chegar a esse ponto - pode usar o Windows PowerShell . Isto não é instalado por defeito em todas as versões do Windows, mas pode descarregá-lo gratuitamente.

Se não gosta da linguagem PowerShell, há o Perl. No entanto, terá de instalar isso em todos os sistemas. Há outros também.

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