1
resposta

Comando for para split em uma string

Bom dia,

Preciso pegar somente o número da versão do Postgres do comando "postgres -V". Estou tentando fazer isso com o comando for, mas sem sucesso. Segue abaixo o comando original e a forma que estou tentando pegar o número 10:

Comando original: "postgres -V"

Saída: "postgres (PostgreSQL) 10.14" (Desejo pegar apenas o número 10 dessa saída, pois é o nome do diretório que vem antes do diretório bin, preciso disso para um script de backup que estou montando).

Tentativa de pegar apenas o número 10 com o comando for:

Entrada: For /f "Tokens=1,3 delims=." %a in ('postgres -V') do (echo %a)

Saída: postgres (PostgreSQL) 10

Entrada: For /f "Tokens=2 delims=." %a in ('postgres -V') do (echo %a)

Saída: 14

Já tentei de várias formas, mas não consigo capturar apenas o número 10. Alguém teria uma sugestão para eu conseguir fazer isso?

1 resposta

3 semanas depois, espero que já tenha resolvido, mas se não... Em powershell daria para fazer assim:

$versao = (postgres -V)
$versao.Replace(' ', '.').Split('.')[-2]

Replace substitui o ' ' (espaço) por '.' (ponto), resultando em: postgres.(PostgreSQL).10.14

Split divide a string usando o '.' (ponto) como separador, resultando em uma lista: @('postgres', '(PostgreSQL)', '10', '14')

[-2] acessa o penúltimo item da lista, resultando no 10 que você quer.

Se quiser fazer tudo numa linha, ainda dá pra fazer assim:

 (postgres -V).Replace(' ', '.').Split('.')[-2]

Espero ter ajudado.