Как исправить ошибку, которая появляется в моем коде пакета (программа-фильтр)? - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь запустить пакетную программу, чтобы отфильтровать электронную почту и пароль пользователей в формате электронной почты: пароль, а также с большим количеством нежелательных слов и аналогичных символов ":" в текстовом файле.

Для фильтрации данных моих пользователей с помощью пакетной программы

@For /F "Delims=" %%A In ('FindStr /L ":" "file.txt"')Do @Echo(%%~nxA>>"combo.txt" Этот код я использую. file.txt содержит эти email:pass и другие тексты тоже. combo.txt выводится с отфильтрованным электронным письмом: pass

file.txt содержит,

Username: emailaddress@mail.com
Password: password123
As Combo: emailaddress@mail.com:password123
Subscription: Premium
Recurring date: 7/8/19
Status: Premium for Family
Country: DE

ОЖИДАЕМЫЙ ВЫХОД в combo.txt есть,

emailaddress@mail.com:password123

НО Я ПОЛУЧИЛ ФАКТИЧЕСКИЙ ВЫХОД в combo.txt,

Username: emailaddress@mail.com
Password: password123
As Combo: emailaddress@mail.com:password123
Subscription: Premium
19
Status: Premium for Family
Country: DE

Ответы [ 3 ]

1 голос
/ 09 июня 2019

При условии, что есть только один набор Username: и Password: в File.txt:

:: Q:\Test\2019\06\09\SO_56516697.cmd
@Echo off&SetLocal
Set "Username="
Set "Password="
for /f "tokens=1*delims=: " %%A in ('
    findstr /i "^Username: ^Password:" "File.txt" 
') Do Set "%%A=%%B"
If defined Username if defined Password (
  Echo:%Username%:%Password%
)>>"combo.txt"

Пример вывода:

> Q:\Test\2019\06\09\SO_56516697.cmd

> type combo.txt
emailaddress@mail.com:password123

Конечно, также возможно отфильтровать несколько наборов Username: и Password: с большей обработкой внутри for (кодовый блок).

0 голосов
/ 10 июня 2019

жизнь намного проще, если вы отфильтруете свои данные до того, что вам действительно нужно:

for /f "tokens=3" %%a in ('type file.txt^|find "As Combo:"') do >combo.txt echo %%a
0 голосов
/ 10 июня 2019

Используя ваш однострочный формат,

For /F "tokens=1,2,*Delims=: " %%A In ('FindStr /L ":" "%filename1%"') Do IF "%%A%%B"=="AsCombo" Echo(%%C>"u:\combo.txt"

Обратите внимание, что я изменил имена файлов в соответствии с моей системой.Код использует как :, так и Пробел в качестве разделителей.На целевой линии As будет присвоен первый токен, %%A и Combo - %%B Следовательно, "%% A %% B" == "AsCombo" выберет строку As Combo и значениев этой строке будет назначено значение %%C.

Обратите внимание, что уменьшено >> до > до create anew, а не append.

На самом деле, FindStr /L ":" можетзаменить на type, поскольку нет никакой реальной выгоды от фильтрации строк, содержащих :.

Отсутствие пробела между ) и DO, кажется, работает, но не является стандартным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...