Войти

Показать полную графическую версию : [решено] Поиск определенных строк из одного файла и сохранение в другой.


unexisted
05-05-2024, 10:41
Здравствуйте всем, ещё раз прошу вашей помощи.

Есть один файл с кучей ненужных строк, и всего двумя полезными строками. (логин и пароль), и это всё повторяется внутри файла. Пример 01.txt:

Ненужные строки
...
Логин
Ненужные строки
...
Пароль
Ненужные строки
...
Логин
Ненужные строки
...
Пароль

Цель кода найти и скопировать в другой файл только те строки, которые начинаются со слов "логин" и "пароль".

Есть следующий код:

@for /f "delims=" %%a in ('^<"%temp%\01.txt" find /i "логин"') do @(set "$a=%%a" &SetLocal EnableDelayedExpansion &echo LOGIN: !$a:~15!>>ИТОГ.txt &EndLocal)
@for /f "delims=" %%a in ('^<"%temp%\01.txt" find /i "пароль"') do @(set "$a=%%a" &SetLocal EnableDelayedExpansion &echo PASSWORD: !$a:~19!>>ИТОГ.txt &EndLocal)

Файл находится в: %temp%\01.txt
Начало строки логин всегда одинаковое, сам логин начинается с 16-го символа, и так же с паролем, он начинается (всегда) с 20-го символа строки.

Минус в том, что итоговый файл получается:
Сначала идут все логины: около 100 шт, а потом все пароли:
LOGIN:
LOGIN:
...
PASSWORD:
PASSWORD:
...

Нужно изменить код или новый, который будет читать два значения за раз и записывать их в новый файл:
LOGIN:
PASSWORD:
LOGIN:
PASSWORD:
...

Никак не могу реализовать.
Спасибо всем за советы и помощь.

DJ Mogarych
05-05-2024, 14:25
"Сделайте за меня домашку, я ничего не делал в учебном году"

Sham
05-05-2024, 17:21
проверяйте строку внутри итерации по файлу
@echo off
for /f "delims=" %%s in (01.txt) do (
set $a=%%s
setlocal EnableDelayedExpansion
if /i "!$a:~0,6!" equ "Пароль" (
echo !$a:~19!>>ИТОГ.txt
) else ( if /i "!$a:~0,5!" equ "Логин" (
echo !$a:~15!>>ИТОГ.txt
))
endlocal
)

unexisted
05-05-2024, 18:45
Sham, спасибо большое, работает идеально.

Есть только одно но, были несколько паролей в виде: !1234567!qwe и !my!password

Из-за присутствия восклицательных знаков в самом пароле, они сохраняются как: qwe и password, то есть только те символы, которые стоят после второго восклицательного знака.

Sham
05-05-2024, 21:06
присутствия восклицательных знаков »
у вас же правильно там - set $a должен быть при выключенном EnableDelayedExpansion, а у меня в итерацию надо перенести.




© OSzone.net 2001-2012