-1

У меня проблема с чем-то. Я новичок и нуб в партии, так что извините, если это глупый вопрос. Я сделал текстовый файл так:

User/Jack

Password/Pancake

Status/Hello

Я хотел показать только пароль, поэтому использовал команду for /f. ;

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

Когда я попробовал это, в моем cmd-окне появилось "Hello". Я пытался это исправить часами, но пока не нашел решения. Не могли бы вы, ребята, помочь мне?

Заранее спасибо!

3 ответа3

1

На каждом цикле (итерации) вы назначаете текстовый токен "Password", перезаписывая все, что содержалось ранее. Таким образом, после завершения цикла For в "Password" будет содержаться Hello как это последнее, что вы назначаете "Password".

Я предполагаю, что у вас есть echo password или аналогичный после цикла для его отображения; если так, переместите это в цикл так, чтобы он отображал переменную на каждой итерации цикла.

1

Вы близки к решению, но пропускаете первую строку, а затем обрабатываете каждую из оставшихся строк, поэтому результирующее значение всегда из последней строки.

Одно решение, которое приходит мне в голову:

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

Это читает каждую строку и разбивает ее на %%a , текст перед / , и %%b , остальную часть строки после / . Переменная Password устанавливается только при совпадении первого поля.

0

Есть несколько способов исправить это, но в вашем случае проще всего было бы переупорядочить «users.txt» и поставить последнюю строку как «Password /Pancake» и установить значение "skip" равным 2. Это исправит вашу проблему.

Тем не менее, я рекомендую переделать сценарий более общим образом, чтобы вы могли получить что-то, чего не знаете.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .