Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Обратотать файл и создать список аккаунтов которые имеют определенную игру (http://forum.oszone.net/showthread.php?t=355431)

aVitaliy 27-06-2024 08:21 3028519

Обратотать файл и создать список аккаунтов которые имеют определенную игру
 
Подскажите как сделать такое. При помощи BAT файла или PowerShell.
Мне надо из текстового файла выбрать аккаунты, которые содержат нужную мне определенную игру и создать отдельный файл с перечнем этих аккаунтов.
В данном случает, мне нужно составить список аккаунтов которые имеют для примера только игру: app/252490 | Rust
Чтобы в конечном итоге этот список выглядел вот так (Все одной строкой, после каждого аккаунта запятая): ac1,ac4,ac5,...

Файл который надо обратотать

<ac1> Уже имеет: app/252490 | Rust
<ac1> Уже имеет: app/700580 | Rust - Staging Branch
<ac1> Уже имеет: app/435120 | Rusty Lake Hotel

<ac2> Уже имеет: app/700580 | Rust - Staging Branch
<ac2> Уже имеет: app/435120 | Rusty Lake Hotel

<ac3> Уже имеет: app/700580 | Rust - Staging Branch
<ac3> Уже имеет: app/435120 | Rusty Lake Hotel

<ac4> Уже имеет: app/252490 | Rust
<ac4> Уже имеет: app/700580 | Rust - Staging Branch
<ac4> Уже имеет: app/435120 | Rusty Lake Hotel

<ac5> Уже имеет: app/252490 | Rust

<ac6> Уже имеет: app/700580 | Rust - Staging Branch
<ac6> Уже имеет: app/435120 | Rusty Lake Hotel

и так далее...

DJ Mogarych 27-06-2024 12:32 3028526

Powershell
Код:

$in = 'C:\temp\in.txt'
$out = 'C:\temp\out.txt'
$game = 'app/252490 | Rust'

(gc $in) -match "$game$" -replace '^<(.+)>.*','$1' -join ',' > $out


sov44 27-06-2024 14:21 3028530

Код:

@echo off
setlocal enabledelayedexpansion

set in=a.txt
set id=252490

for /f "tokens=1 delims=<>" %%a in ('type %in% ^|find "%id%"') do set r=!r!,%%a
echo %id% = %r:~1%
pause


aVitaliy 01-07-2024 11:21 3028632

Цитата:

Цитата sov44
Код:
@echo off
setlocal enabledelayedexpansion
set in=a.txt
set id=252490
for /f "tokens=1 delims=<>" %%a in ('type %in% ^|find "%id%"') do set r=!r!,%%a
echo %id% = %r:~1%
pause »

Можно как-то так же извлечеть из лог файла имена аккаунтов и составить из них них список (Все одной строкой, после каждого аккаунта запятая): ac1,ac4,ac5,...
Только вот имена аккаунтов, проблема в том что могут быть разной длины. Для примера 11 и 12 символов.

Файл который надо обратотать

2024-07-01 03:30:29|ArchiSteamFarm-9720|DEBUG|zlobniychel|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 04:54:19|ArchiSteamFarm-9720|DEBUG|vertimoguner|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 05:26:30|ArchiSteamFarm-9720|DEBUG|nastoyazhiy|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 05:46:01|ArchiSteamFarm-9720|DEBUG|progorklynov|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english

DJ Mogarych 01-07-2024 11:28 3028633

Powershell
Код:

$in = 'C:\temp\in.txt'
$out = 'C:\temp\out.txt'

(gc $in |% {$_.split('|')[3]}) -join ',' > $out


aVitaliy 01-07-2024 12:38 3028634

Цитата:

Цитата DJ Mogarych
Powershell
Код:
$in = 'C:\temp\in.txt'
$out = 'C:\temp\out.txt'
(gc $in |% {$_.split('|')[3]}) -join ',' > $out »

Срабатывает, но так как в лог файле есть еще много других строк содержащие имена аккаунтов, то выводит вообще все аккаунты, а не только аккаунты которые содержат строки "InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english".

DJ Mogarych 01-07-2024 13:09 3028635

aVitaliy, так нужно было написать об этом, телепатов нету же.

Код:

$in = 'C:\temp\in.txt'
$out = 'C:\temp\out.txt'
$str = 'InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english'

(sls -Path $in -SimpleMatch $str |% {$_.tostring().split('|')[3]}) -join ',' > $out


aVitaliy 01-07-2024 13:23 3028636

Цитата:

Цитата DJ Mogarych
aVitaliy, так нужно было написать об этом, телепатов нету же. »

Согласен, упустил из виду, не подумал заранее об этом. Сейчас проверил, работает как надо. Благодарю!

sov44 16-07-2024 10:53 3029021

Цитата:

Цитата aVitaliy
Можно как-то так же извлечеть из лог файла имена аккаунтов и составить из них них список (Все одной строкой, после каждого аккаунта запятая): ac1,ac4,ac5,... »

Код:

@echo off
setlocal enabledelayedexpansion
set in=a1.txt
for /f "tokens=4 delims=|" %%a in ('type %in%') do set r=!r!,%%a
echo %r:~1%
pause


aVitaliy 16-07-2024 14:42 3029032

Цитата:

Цитата sov44
Цитата aVitaliy:
Можно как-то так же извлечеть из лог файла имена аккаунтов и составить из них них список (Все одной строкой, после каждого аккаунта запятая): ac1,ac4,ac5,... »
Код:
@echo off
setlocal enabledelayedexpansion
set in=a1.txt
for /f "tokens=4 delims=|" %%a in ('type %in%') do set r=!r!,%%a
echo %r:~1%
pause »

Что-то не срабатывает у меня.
Переделал немного, как выше был другой рабочий вариант.
Но у меня выводит в итоге только самый последний аккаунт, все остальные не выводятся.
То есть в итоге получается как-то так:
Forbidden = r!,ac5

Вот сам скрипт, который я переделал, но что в нем переделать, чтобы работал и выводил все аккаунты?

Код:

@echo off
set in=log.txt
set id=Forbidden
for /f "tokens=4 delims=|" %%a in ('type %in% ^|find "%id%"') do set r=!r!,%%a
echo %id% = %r:~1% > Forbidden-Owns.txt
:pause


sov44 16-07-2024 15:44 3029033

aVitaliy, у меня вроде всё работает.
code

Код:

@echo off
setlocal enabledelayedexpansion
set in=a1.txt
for /f "tokens=4 delims=|" %%a in ('type %in%') do set r=!r!,%%a
echo %r:~1%
pause



a1.txt

2024-07-01 03:30:29|ArchiSteamFarm-9720|DEBUG|zlobniychel|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 04:54:19|ArchiSteamFarm-9720|DEBUG|vertim|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 05:26:30|ArchiSteamFarm-9720|DEBUG|nastoyazhiy|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 05:46:01|ArchiSteamFarm-9720|DEBUG|progorklynov|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english


Результат

zlobniychel,vertim,nastoyazhiy,progorklynov
Для продолжения нажмите любую клавишу . . .

aVitaliy, для вычисления возникшей у вас ошибки, прикрепите в теме файл для обработки или отправьте мне его в личку.

aVitaliy 16-07-2024 16:57 3029034

sov44,
Если использовать тот же файл a1.txt
a1.txt
2024-07-01 03:30:29|ArchiSteamFarm-9720|DEBUG|zlobniychel|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 04:54:19|ArchiSteamFarm-9720|DEBUG|vertim|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 05:26:30|ArchiSteamFarm-9720|DEBUG|nastoyazhiy|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 05:46:01|ArchiSteamFarm-9720|DEBUG|progorklynov|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english


И вот этот скрипт:
Код:

@echo off
set in=a1.txt
set id=Forbidden
for /f "tokens=4 delims=|" %%a in ('type %in% ^|find "%id%"') do set r=!r!,%%a
echo %id% = %r:~1%
pause

То получается такой результат:

Forbidden = r!,progorklynov

То есть выводит, но только самый последний аккаунт, вместо всех.
Вот этот скрип не пойму как изменить/доделать чтобы вывел все аккаунты.

sov44 16-07-2024 17:07 3029035

aVitaliy, уберите
Код:

^|find "%id%"
Иными словами вы просматриваете текстовый файл a1 на наличие строк со словом Forbidden, а затем найденные строки разбиваете на токены. В этом ошибка.

aVitaliy 16-07-2024 18:02 3029036

sov44,
Цитата:

Цитата sov44
Иными словами вы просматриваете текстовый файл a1 на наличие строк со словом Forbidden, а затем найденные строки разбиваете на токены. В этом ошибка. »

Да, так как лог файле содержиться очень много другой информации.
И мне надо из строк где есть слово Forbidden выделить имя аккаунта и вывести/показать все эти имена аккаунтов.

В вашем скрипте выводиться ввобще все имена аккаунтов:

Код:

@echo off
setlocal enabledelayedexpansion
set in=a1.txt
for /f "tokens=4 delims=|" %%a in ('type %in%') do set r=!r!,%%a
echo %r:~1%
pause



a1.txt

2024-07-01 03:30:29|ArchiSteamFarm-9720|DEBUG|zlobniychel|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 04:54:19|ArchiSteamFarm-9720|DEBUG|vertim|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 05:26:30|ArchiSteamFarm-9720|DEBUG|nastoyazhiy|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 05:46:01|ArchiSteamFarm-9720|DEBUG|progorklynov|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-11 12:02:12|ArchiSteamFarm-8740|WARN|ac3|SendTradeOffer() Не удалось из-за ошибки: You have sent too many trade offers, or have too many outstanding trade offers with ac0. Please cancel some before sending more.
2024-07-11 12:04:24|ArchiSteamFarm-8740|DEBUG|ac1|InternalRequest() InternalServerError <- POST https://steamcommunity.com/tradeoffer/new/send
2024-07-11 12:04:24|ArchiSteamFarm-8740|WARN|ac2|SendTradeOffer() Не удалось из-за ошибки: There was an error sending your trade offer. Please try again later. (15)
2024-07-11 12:07:24|ArchiSteamFarm-8740|DEBUG|ac5|InternalRequest() InternalServerError <- POST https://steamcommunity.com/tradeoffer/new/send
2024-07-11 12:07:24|ArchiSteamFarm-8740|WARN|ac6|SendTradeOffer() Не удалось из-за ошибки: There was an error sending your trade offer. Please try again later. (15)
2024-07-14 16:17:14|ArchiSteamFarm-8740|INFO|ac7|Init() Успешно!


Получил такой результат:
zlobniychel,vertim,nastoyazhiy,progorklynov,ac3,ac1,ac2,ac5,ac6,ac7
Для продолжения нажмите любую клавишу . . .

sov44 16-07-2024 19:19 3029039

aVitaliy, пробуйте
Код:

@echo off
setlocal enabledelayedexpansion

set in=a1.txt
set id=Forbidden

for /f "tokens=4 delims=|" %%a in ('type %in% ^|find /i "%id%" 2^>nul') do set r=!r!,%%a
echo  %id% = %r:~1%
pause
exit

a1.txt

2024-07-01 03:30:29|ArchiSteamFarm-9720|DEBUG|zlobniychel|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 04:54:19|ArchiSteamFarm-9720|DEBUG|vertim|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 05:26:30|ArchiSteamFarm-9720|DEBUG|nastoyazhiy|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 05:46:01|ArchiSteamFarm-9720|DEBUG|progorklynov|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-11 12:02:12|ArchiSteamFarm-8740|WARN|ac3|SendTradeOffer() Не удалось из-за ошибки: You have sent too many trade offers, or have too many outstanding trade offers with ac0. Please cancel some before sending more.
2024-07-11 12:04:24|ArchiSteamFarm-8740|DEBUG|ac1|InternalRequest() InternalServerError <- POST https://steamcommunity.com/tradeoffer/new/send
2024-07-11 12:04:24|ArchiSteamFarm-8740|WARN|ac2|SendTradeOffer() Не удалось из-за ошибки: There was an error sending your trade offer. Please try again later. (15)
2024-07-11 12:07:24|ArchiSteamFarm-8740|DEBUG|ac5|InternalRequest() InternalServerError <- POST https://steamcommunity.com/tradeoffer/new/send
2024-07-01 05:46:01|ArchiSteamFarm-9720|DEBUG|progorklynov77|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-11 12:07:24|ArchiSteamFarm-8740|WARN|ac6|SendTradeOffer() Не удалось из-за ошибки: There was an error sending your trade offer. Please try again later. (15)
2024-07-14 16:17:14|ArchiSteamFarm-8740|INFO|ac7|Init() Успешно!
2024-07-01 05:46:01|ArchiSteamFarm-9720|DEBUG|progorklynov111|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 05:26:30|ArchiSteamFarm-9720|DEBUG|nastoyazhiy77|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-01 05:46:01|ArchiSteamFarm-9720|DEBUG|progorklynov000|InternalRequest() Forbidden <- GET https://store.steampowered.com/explore?l=english
2024-07-11 12:02:12|ArchiSteamFarm-8740|WARN|ac3|SendTradeOffer() Не удалось из-за ошибки: You have sent too many trade offers, or have too many outstanding trade offers with ac0. Please cancel some before sending more.
2024-07-11 12:04:24|ArchiSteamFarm-8740|DEBUG|ac1|InternalRequest() InternalServerError <- POST https://steamcommunity.com/tradeoffer/new/send


результат

Forbidden = zlobniychel,vertim,nastoyazhiy,progorklynov,progorklynov77,progorklynov111,nastoyazhiy77,progorklyno v000
Для продолжения нажмите любую клавишу . . .


aVitaliy 17-07-2024 04:39 3029048

sov44,
Да это то что надо. Обработал лог файл и вывел все аккаунты которые были с Forbidden.

Большое спасибо за помощь sov44 и DJ Mogarych.


Время: 08:05.

Время: 08:05.
© OSzone.net 2001-