![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Необходимо из файла считать строку и участи строки присвоить переменным |
|
CMD/BAT - Необходимо из файла считать строку и участи строки присвоить переменным
|
Новый участник Сообщения: 9 |
Есть текстовый файл в котором есть строка
remote result (not to be trusted): [ 82074624499369902458868130586453554849 65228258370552867395165752861763116226784530337709001549878075 100000000000 256 ] необходимо для каждое числа, которое заключено в [ ] присвоить значение переменной, числа могут быть разной длины каждое a=82074624499369902458868130586453554849 b=65228258370552867395165752861763116226784530337709001549878075 c=100000000000 d=256 |
|
Отправлено: 22:38, 18-11-2021 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
|
|
Отправлено: 14:29, 19-11-2021 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Crazy Сообщения: 1235
|
Профиль | Отправить PM | Цитировать Цитата boomdeamon:
Вот, только реализовывать - мне лично, лень вспоминать CMD, ибо с powershell-ом всё гораздо проще решается, а cmd фактически уже не пользуюсь и многое позабылось... Но возможно, кому-нибудь захочется это реализовать... просто подождать надо. |
|
------- Отправлено: 14:34, 19-11-2021 | #12 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Да я согласен и на powershell если на нем задача целиком решается
|
Отправлено: 14:35, 19-11-2021 | #13 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать YuS_2, boomdeamon,
Цитата YuS_2:
Поэтому извратимся: приделаем к началу цифровой строки для удобства обозначения границы буковку, например, z (потом пригодится для усекновения лишнего) и, допустим, 120 нулей. Далее, отрежем от конца 120 символов, приделаем к этой строке префикс, например, @@, получим набор одинаковых по длине строк, и сделаем финт: используем эту строку как имя переменной, присвоим ей номер гивера. Получим (в сокращенном виде, длинную строку лень рисовать) нечто подобное @@0000000z123454=4 Далее Set "@@" выдаст номера гиверов в порядке возрастания их строковых значений, а вычленить из имени переменной гивер (помним о буковке z) не составляет труда. @Echo Off
cls
Set "KeyWord=remote result (not to be trusted):"
Set "Prefix=Giver"
Set "Giver0=kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN"
Set "Giver1=kf8SYc83pm5JkGt0p3TQRkuiM58O9Cr3waUtR9OoFq716lN-"
Set "Giver2=kf-FV4QTxLl-7Ct3E6MqOtMt-RGXMxi27g4I645lw6MTWraV"
Set "Giver3=kf_NSzfDJI1A3rOM0GQm7xsoUXHTgmdhN5-OrGD8uwL2JMvQ"
Set "Giver4=kf8gf1PQy4u2kURl-Gz4LbS29eaN4sVdrVQkPO-JL80VhOe6"
Set "Giver5=kf8kO6K6Qh6YM4ddjRYYlvVAK7IgyW8Zet-4ZvNrVsmQ4EOF"
Set "Giver6=kf-P_TOdwcCh0AXHhBpICDMxStxHenWdLCDLNH5QcNpwMHJ8"
Set "Giver7=kf91o4NNTryJ-Cw3sDGt9OTiafmETdVFUMvylQdFPoOxIsLm"
Set "Giver8=kf9iWhwk9GwAXjtwKG-vN7rmXT3hLIT23RBY6KhVaynRrIK7"
Set "Giver9=kf8JfFUEJhhpRW80_jqD7zzQteH6EBHOzxiOhygRhBdt4z2N"
For /L %%i In (0,1,9) Do (
For /F "usebackq tokens=2 delims=[]" %%s In (`2^>nul Call More "Z:\Box_In\%%%Prefix%%%i%%" ^| FINDSTR /I "%KeyWord%"`) Do Call :Out "a" "Complex" "c" "d" %%s
rem For /F "usebackq tokens=2 delims=[]" %%s In (`2^>nul Call lite-client.exe -v 0 -C global.config.json -rc "runmethod %%%Prefix%%%i%% get_pow_params" ^| FINDSTR /I "%KeyWord%"`) Do Call :Out "a" "Complex" "c" "d"
Call Set "Name=000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000z%%Complex%%"
Call Set "Name=@@%%Name:~-120%%"
Call Set "%%Name%%=%%i"
)
For /F "usebackq tokens=1,2 delims==" %%i In (`Set "@@"`) Do (
Set "nBestGiver=%%j"
Set "BestGiver=%%i"
Call Set "BestGiver=%%BestGiver:*z=%%"
Call Set "Out= %%BestGiver%%"
Call Echo %%j=%%Out:~-100%%
)
Echo. &Echo nBestGiver=%Prefix%%nBestGiver% &Echo MaxComplex=%BestGiver% &Call Echo BestGiver =%%%Prefix%%nBestGiver%%%
Pause
Exit /B
:Out
Set "%~1=%5" &Set "%~2=%6" &Set "%~3=%7" &Set "%~4=%8"
Exit /B
Для отладки применил обходной маневр: создал 10 файлов с именами совпадающими с гиверами (не знаю, что это такое и вряд ли захочу узнать), как указано у заказчика, в которых записал содержимое, которое, как я понял, выдаёт программа lite-client.exe. И вместо этой программы стандартным морем выдаю содержимое для обработки (в красной отладочной строке). Естественно, данные слегка изменил, чтобы иметь возможность для сортировки. Набор этих отладочных файлов прилагаю - вдруг кто-то захочет попробовать, только путь надо будет вместо Z:\Box_In свой прописать) В принципе, вся задача, которая сводится к сортировке длинных цифровых строк, в CMD решается. |
|
------- Последний раз редактировалось megaloman, 19-11-2021 в 23:27. Отправлено: 20:22, 19-11-2021 | #14 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
К сожалению не заработал скрипт и думаю проблема в том что из-за перенаправлений ввода и вывода lite-client.exe не успевает отдать весь фрагмент вывода и видимо в данном случае нужно использовать вывод в отдельный временный файл, For /F "usebackq tokens=2 delims=[]" %%s In (lite-client.exe -v 0 -C global.config.json -rc "runmethod %%%Prefix%%%i%% get_pow_params" >%file%) а потом уже это файл парсить как в примере, так как пример именно с файлом да отлично справляется, когда фрагмент в файле. А по результату работы примера, да пример вычисляется, только BestGiver это должно быть одно из значений одного из десяти гиверов, а в примере туда подставляется наибольший Complex, а необходимо значение лучшего гивера сейчас скрипт выдает значения по тестовым данным nBestGiver=Giver5 BestGiver=363407965974365185119488504750453864583808513014607073315407340 а надо nBestGiver=Giver5 Complex=363407965974365185119488504750453864583808513014607073315407340 BestGiver=kf8kO6K6Qh6YM4ddjRYYlvVAK7IgyW8Zet-4ZvNrVsmQ4EOF |
|
Последний раз редактировалось boomdeamon, 19-11-2021 в 22:54. Отправлено: 22:45, 19-11-2021 | #15 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Цитата boomdeamon:
Хотелось бы разобраться, почему К сожалению не заработал скрипт и не думаю что проблема из-за перенаправлений ввода и вывода, но надо больше информации.
Я иду у Вас на поводу и выделяю формирование файлов отдельно. @Echo Off
cls
Set "BoxOut=Z:\Box_Out"
Set "Prefix=Giver"
Set "Giver0=kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN"
Set "Giver1=kf8SYc83pm5JkGt0p3TQRkuiM58O9Cr3waUtR9OoFq716lN-"
Set "Giver2=kf-FV4QTxLl-7Ct3E6MqOtMt-RGXMxi27g4I645lw6MTWraV"
Set "Giver3=kf_NSzfDJI1A3rOM0GQm7xsoUXHTgmdhN5-OrGD8uwL2JMvQ"
Set "Giver4=kf8gf1PQy4u2kURl-Gz4LbS29eaN4sVdrVQkPO-JL80VhOe6"
Set "Giver5=kf8kO6K6Qh6YM4ddjRYYlvVAK7IgyW8Zet-4ZvNrVsmQ4EOF"
Set "Giver6=kf-P_TOdwcCh0AXHhBpICDMxStxHenWdLCDLNH5QcNpwMHJ8"
Set "Giver7=kf91o4NNTryJ-Cw3sDGt9OTiafmETdVFUMvylQdFPoOxIsLm"
Set "Giver8=kf9iWhwk9GwAXjtwKG-vN7rmXT3hLIT23RBY6KhVaynRrIK7"
Set "Giver9=kf8JfFUEJhhpRW80_jqD7zzQteH6EBHOzxiOhygRhBdt4z2N"
Set "KeyWord=remote result (not to be trusted):"
For /L %%i In (0,1,9) Do (
Call :Giver "%BoxOut%" "%%%Prefix%%%i%%"
>nul Call Copy "Z:\Box_In\%%%Prefix%%%i%%" "%BoxOut%\"
)
For /L %%i In (0,1,9) Do (
For /F "usebackq tokens=2 delims=[]" %%s In (`2^>nul Call More "%BoxOut%\%%%Prefix%%%i%%" ^| FINDSTR /I "%KeyWord%"`) Do Call :Out "a" "Complex" "c" "d" %%s
Call Set "Name=000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000z%%Complex%%"
Call Set "Name=@@%%Name:~-120%%"
Call Set "%%Name%%=%%i"
)
For /F "usebackq tokens=1,2 delims==" %%i In (`Set "@@"`) Do (
Set "nBestGiver=%%j"
Set "BestGiver=%%i"
Call Set "BestGiver=%%BestGiver:*z=%%"
Call Set "Out= %%BestGiver%%"
Call Echo %%j=%%Out:~-100%%
)
Echo. &Echo nBestGiver=%Prefix%%nBestGiver% &Echo MaxComplex=%BestGiver% &Call Echo BestGiver =%%%Prefix%%nBestGiver%%%
Pause
Exit /B
:Out
Set "%~1=%5" &Set "%~2=%6" &Set "%~3=%7" &Set "%~4=%8"
Exit /B
:Giver
2>nul Del "%~1\%~2"
Echo lite-client.exe -v 0 -C global.config.json -rc "runmethod %~2 get_pow_params"
2>nul >>"%~1\%~2" lite-client.exe -v 0 -C global.config.json -rc "runmethod %~2 get_pow_params"
Exit /B
|
|
------- Последний раз редактировалось megaloman, 20-11-2021 в 00:28. Отправлено: 00:19, 20-11-2021 | #16 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
lite-client.exe -v 0 -C global.config.json -rc "runmethod kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN get_pow_params">kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN @Echo Off cls Set "KeyWord=remote result (not to be trusted):" Set "Prefix=Giver" Set "Giver0=kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN" Set "Giver1=kf8SYc83pm5JkGt0p3TQRkuiM58O9Cr3waUtR9OoFq716lN-" Set "Giver2=kf-FV4QTxLl-7Ct3E6MqOtMt-RGXMxi27g4I645lw6MTWraV" Set "Giver3=kf_NSzfDJI1A3rOM0GQm7xsoUXHTgmdhN5-OrGD8uwL2JMvQ" Set "Giver4=kf8gf1PQy4u2kURl-Gz4LbS29eaN4sVdrVQkPO-JL80VhOe6" Set "Giver5=kf8kO6K6Qh6YM4ddjRYYlvVAK7IgyW8Zet-4ZvNrVsmQ4EOF" Set "Giver6=kf-P_TOdwcCh0AXHhBpICDMxStxHenWdLCDLNH5QcNpwMHJ8" Set "Giver7=kf91o4NNTryJ-Cw3sDGt9OTiafmETdVFUMvylQdFPoOxIsLm" Set "Giver8=kf9iWhwk9GwAXjtwKG-vN7rmXT3hLIT23RBY6KhVaynRrIK7" Set "Giver9=kf8JfFUEJhhpRW80_jqD7zzQteH6EBHOzxiOhygRhBdt4z2N" call kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN.cmd call kf8SYc83pm5JkGt0p3TQRkuiM58O9Cr3waUtR9OoFq716lN-.cmd call kf-FV4QTxLl-7Ct3E6MqOtMt-RGXMxi27g4I645lw6MTWraV.cmd call kf_NSzfDJI1A3rOM0GQm7xsoUXHTgmdhN5-OrGD8uwL2JMvQ.cmd call kf8gf1PQy4u2kURl-Gz4LbS29eaN4sVdrVQkPO-JL80VhOe6.cmd call kf8kO6K6Qh6YM4ddjRYYlvVAK7IgyW8Zet-4ZvNrVsmQ4EOF.cmd call kf-P_TOdwcCh0AXHhBpICDMxStxHenWdLCDLNH5QcNpwMHJ8.cmd call kf91o4NNTryJ-Cw3sDGt9OTiafmETdVFUMvylQdFPoOxIsLm.cmd call kf9iWhwk9GwAXjtwKG-vN7rmXT3hLIT23RBY6KhVaynRrIK7.cmd call kf8JfFUEJhhpRW80_jqD7zzQteH6EBHOzxiOhygRhBdt4z2N.cmd For /L %%i In (0,1,9) Do ( For /F "usebackq tokens=2 delims=[]" %%s In (`2^>nul Call More "%%%Prefix%%%i%%" ^| FINDSTR /I "%KeyWord%"`) Do Call :Out "a" "Complex" "c" "d" %%s Call Set "Name=0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000z%%Complex%%" Call Set "Name=@@%%Name:~-120%%" Call Set "%%Name%%=%%i" ) For /F "usebackq tokens=1,2 delims==" %%i In (`Set "@@"`) Do ( Set "nBestGiver=%%j" Set "BestGiver=%%i" Call Set "BestGiver=%%BestGiver:*z=%%" Call Set "Out= %%BestGiver%%" Call Echo %%j=%%Out:~-100%% ) Echo. &Echo nBestGiver=%Prefix%%nBestGiver% &Echo MaxComplex=%BestGiver% &Call Echo BestGiver=%%%Prefix%%nBestGiver%%% Pause Exit /B :Out Set "%~1=%5" &Set "%~2=%6" &Set "%~3=%7" &Set "%~4=%8" Exit /B |
|
Отправлено: 00:41, 20-11-2021 | #17 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать |
------- Последний раз редактировалось megaloman, 20-11-2021 в 01:11. Отправлено: 00:47, 20-11-2021 | #18 |
Crazy Сообщения: 1235
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
![]() Цитата megaloman:
В общем: boomdeamon, если не выйдет соорудить код на CMD, то попробуем на powershell. Не хочется вникать в сам майнинг и запускать эти программы у себя, но чтобы написать код, необходимо тестировать сами программы и проверять, что у них на выходе... в крайнем случае, можно будет через внешний файл работать. |
||
------- Отправлено: 08:22, 20-11-2021 | #19 |
Crazy Сообщения: 1235
|
Профиль | Отправить PM | Цитировать Цитата boomdeamon:
Примерно так: 1. Создаем новый батник run_cuda_new.bat run_cuda_new.bat
@echo off for /F "tokens=*" %%I in (run_config.ini) do set %%I set "LOG=" if "%USE_LOG%"=="Y" ( set "LOG=-l %LOG_FILE%" ) title GPU %GPU_ID% CUDA log=%USE_LOG% REM =======begin вставка 1======= set "folder=.\1\" set givers="kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN" "kf8SYc83pm5JkGt0p3TQRkuiM58O9Cr3waUtR9OoFq716lN-" "kf-FV4QTxLl-7Ct3E6MqOtMt-RGXMxi27g4I645lw6MTWraV" "kf_NSzfDJI1A3rOM0GQm7xsoUXHTgmdhN5-OrGD8uwL2JMvQ" "kf8gf1PQy4u2kURl-Gz4LbS29eaN4sVdrVQkPO-JL80VhOe6" "kf8kO6K6Qh6YM4ddjRYYlvVAK7IgyW8Zet-4ZvNrVsmQ4EOF" "kf-P_TOdwcCh0AXHhBpICDMxStxHenWdLCDLNH5QcNpwMHJ8" "kf91o4NNTryJ-Cw3sDGt9OTiafmETdVFUMvylQdFPoOxIsLm" "kf9iWhwk9GwAXjtwKG-vN7rmXT3hLIT23RBY6KhVaynRrIK7" "kf8JfFUEJhhpRW80_jqD7zzQteH6EBHOzxiOhygRhBdt4z2N" for %%a in (%givers%) do set "giver=%%~a"&call :test for /f "tokens=1,2 delims= " %%x in ('powershell -ex bypass .\script.ps1') do ( set GIVER_ADDR=%%x ) REM =======end вставка 1======= echo on :_minerstart tonlib-cuda-cli.exe -V tonlib-cuda-cli.exe -v 3 -C %CONFIG_FILE% -e "pminer start %GIVER_ADDR% %MY_ADDR% %GPU_ID% %BOOST_FACTOR% %GPU_PLATFORM_ID%" %LOG% goto _minerstart pause&exit /b REM =======begin вставка 2======= :test lite-client.exe -v 0 -C global.config.json -rc "runmethod %giver% get_pow_params" >"%folder%%giver%.txt" REM =======end вставка 2======= - отличается от оригинального вставленным кодом из двух частей (пометки на вставки есть) Giver-ы записаны в переменную %Givers% (каждый отдельно, в двойных кавычках и друг от друга отделяются пробелом) В процессе работы будет создан каталог "1" (имя можно изменить, но если менять, то и в батнике, и в скрипте powershell одновременно), в котором будут формироваться результаты работы тестирования lite-client.exe, в текстовых файлах с именами Giver-ов. 2. Скрипт powershell script.ps1 (сохранить лучше в UTF8 с BOM и разместить надо рядом с run_cuda_new.bat): script.ps1
$folder = '.\1' $flt = '*.txt' $arr=@() (dir $folder -filter $flt -file|%{ $arr = (gc $_.fullname -enc utf8| ?{$_ -match 'remote result'}) -split " |\[|\]"|?{$_ -match '^\d+$'} [pscustomobject]@{ Giver = $_.basename Complex = [bigint]::parse($arr[1]) } }|sort Complex -d|select -first 1|ft -hid|out-string).trim() - в powershell анализируются результаты тестов Giver-ов, выбирается единственный по наибольшему значению: Цитата boomdeamon:
- Это если, конечно, я верно осмыслил задачу... если что не так, поправить можно легко... PS Да, powershell должен быть v 5.1... на более старых версиях работоспособность не гарантируется. ![]() |
||
------- Отправлено: 14:00, 20-11-2021 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - CMD - читаю из файла, если первый символ строки =*, то вывести на экран строку | jester7 | Скриптовые языки администрирования Windows | 16 | 11-04-2022 13:52 | |
PowerShell - Разложить строку по переменным. | garm | Скриптовые языки администрирования Windows | 8 | 14-10-2020 12:18 | |
CMD/BAT - Слова вводимые пользователем разбить на части и присвоить переменным | zerdox@vk | Скриптовые языки администрирования Windows | 20 | 03-08-2019 18:30 | |
CMD/BAT - [решено] Присвоить переменным значения имен файлов в папке | kopbetby | Скриптовые языки администрирования Windows | 5 | 10-10-2016 14:26 | |
VBS/WSH/JS - Считать переменную из файла | Udar_Nick | Скриптовые языки администрирования Windows | 17 | 30-06-2016 12:14 |
|