para o comando / f não funciona corretamente (para mim)

-1

Eu tenho um problema com alguma coisa. Eu sou um novato e um noob em lote, então desculpe se esta é uma pergunta estúpida. Eu fiz um arquivo de texto como este:

User/Jack

Password/Pancake

Status/Hello

Eu queria mostrar apenas a senha, então usei o comando for / f. ;

for /f "delims=/ skip=1 tokens=2" %%a in (Users.txt) do (
    set Password=%%a 
)

Quando tentei, "Olá" apareceu na minha janela do cmd. Eu tenho tentado consertar isso por horas, mas ainda não encontrei uma solução. Vocês poderiam me ajudar?

Obrigado antecipadamente!

    
por Poseidon 24.11.2016 / 17:46

3 respostas

1

Em cada ciclo de passagem (iteração), você atribui o token de texto a "Senha", sobrescrevendo o que continha anteriormente. Então, depois que o loop For terminar, "Password" conterá Hello , pois é a última coisa que você atribui a "Password".

Estou supondo que você tenha echo password ou similar após o loop para exibi-lo; se for o caso, mova-o para o loop, de modo a exibir a variável em cada iteração do loop.

    
por 24.11.2016 / 18:01
1

Você está próximo da solução, mas está pulando a primeira linha e processando cada uma das linhas restantes, de modo que o valor resultante é sempre da linha último .

Uma solução que ocorre para mim é: -

for /f "delims=/ tokens=1*" %%a in (Users.txt) do (
    if "%%a" == "Password" set Password=%%b 
)

Isso lê cada linha e divide em %%a , o texto antes de / e %%b , o restante da linha após o / . A variável Password é definida apenas quando o primeiro campo corresponde.

    
por 24.11.2016 / 18:17
0

Existem algumas formas de resolver isto, mas o mais fácil no seu caso seria reordenar o "users.txt" e colocar a última linha como "Password / Pancake" e definir o seu valor "skip" para 2. Isso resolverá seu problema.

Eu recomendo embora para refazer o script de uma forma mais genérica, para que você possa realmente buscar algo que você não conhece a posição.

    
por 24.11.2016 / 18:05