Zversky 16 24 ноября, 2022 Опубликовано 24 ноября, 2022 · Жалоба Батник в виде @echo off %GowinPath%\Gowin_V1.9.8.09\Programmer\bin\programmer_cli.exe --scan-cables echo Done pause exit выводит в консоль Cable found: Gowin USB Cable(FT2CH)/0/324/GW-7qrVl (USB location:324) (SN: GW-7qrVl) Cost 0.05 second(s) Done как выцарапать из его вывода выводимые им данные, чтобы обработать их в том же батнике ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 192 24 ноября, 2022 Опубликовано 24 ноября, 2022 · Жалоба Например, с помощью средств PowerShell. bat-файлы это прошлый век и пора использовать более современные средства. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zversky 16 24 ноября, 2022 Опубликовано 24 ноября, 2022 · Жалоба Да, спасибо. Настала пора переходить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 192 24 ноября, 2022 Опубликовано 24 ноября, 2022 · Жалоба 10 минут назад, Zversky сказал: Да, спасибо. Настала пора переходить. Если у вас где-то используется Python или TCL, то на них можно сделать более переносимый вариант, т.к. лично мне в PowerShell не нравится его плохая переносимость. В этом плане Python или TCL (tclsh) выглядят практически идеальным вариантом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zversky 16 24 ноября, 2022 Опубликовано 24 ноября, 2022 · Жалоба 2 минуты назад, makc сказал: В этом плане Python или TCL (tclsh) выглядят практически идеальным вариантом. Python знаю, но здесь, по кр. мере, не использую, TCL же использую при моделировании в QuestaSim, но как его сюда прикрутить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 192 24 ноября, 2022 Опубликовано 24 ноября, 2022 · Жалоба 9 минут назад, Zversky сказал: TCL же использую при моделировании в QuestaSim, но как его сюда прикрутить? Ставите интерпретатор из https://www.tcl.tk/software/tcltk/bindist.html и далее пишете скрипт, который запускает что нужно и парсит выхлоп. Для TCL есть прекрасная библиотека expect, которая позволяет упростить парсинг с помощью простого задания сигнатур и реакций на них. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zig 31 24 ноября, 2022 Опубликовано 24 ноября, 2022 · Жалоба 8 часов назад, Zversky сказал: как выцарапать из его вывода выводимые им данные, чтобы обработать их в том же батнике? Что вы хотите получить на выходе? Батник: Спойлер @echo off setlocal for /f "tokens=6,7,8,9,10,11,12 delims=() " %%a in (qq.txt) do ( set a1=%%a set a2=%%b set a3=%%c set a4=%%d set a5=%%e set a6=%%f ) echo %a1% echo %a2% echo %a3% echo %a4% echo %a5% echo %a6% Выведет: Спойлер FT2CH /0/324/GW-7qrVl USB location:324 SN: GW-7qrVl Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zversky 16 24 ноября, 2022 Опубликовано 24 ноября, 2022 · Жалоба 4 часа назад, Zig сказал: qq.txt Что это? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zig 31 25 ноября, 2022 Опубликовано 25 ноября, 2022 · Жалоба 11 часов назад, Zversky сказал: Что это? Результат перенаправления вывода вашей программы в файл. %GowinPath%\Gowin_V1.9.8.09\Programmer\bin\programmer_cli.exe --scan-cables>qq.txt Можно попробовать изменить мой батник (строку с for) для обработки результата выполнения команды, а не файла, как у меня написано выше. Тип так: @echo off setlocal for /f "usebackq tokens=6,7,8,9,10,11,12 delims=() " %%a in (`%GowinPath%\Gowin_V1.9.8.09\Programmer\bin\programmer_cli.exe --scan-cables`) do ( set a1=%%a set a2=%%b set a3=%%c set a4=%%d set a5=%%e set a6=%%f ) echo %a1% echo %a2% echo %a3% echo %a4% echo %a5% echo %a6% но это нужно проверять... Обратите внимание на вид кавычек обрамляющих команду. Описание команды for можно посмотреть набрав в командной строке: for /? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zversky 16 25 ноября, 2022 Опубликовано 25 ноября, 2022 · Жалоба 55 минут назад, Zig сказал: Описание команды for можно посмотреть набрав в командной строке: for /? Спасибо огромное: я обязательно попробую, уже чувствуя на себе неодобрительные выводы господина модератора и моих коллег, которые давно направляли меня в будущее. Но и в будущее я уже смотрю довольно уверенно, о чём непременно доложусь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zversky 16 25 ноября, 2022 Опубликовано 25 ноября, 2022 · Жалоба Ну, из серии "Гора родила мышь или ногами не пинать" Спойлер @echo off : Header set HeaderString="File name : GowinSearchCable.bat" set HeaderString=%HeaderString%;"Description : Searches Gowing programmer" set HeaderString=%HeaderString%;" by Gowin's programmer_cli" set HeaderString=%HeaderString%;"" set HeaderString=%HeaderString%;"Format : Plain text Windows (CR LF)" set HeaderString=%HeaderString%;"Encoding : UTF-8" set HeaderString=%HeaderString%;"Version : 01" set HeaderString=%HeaderString%;"Date : 25.11.2022" set HeaderString=%HeaderString%;"" set HeaderString=%HeaderString%;"Author : Anatoly Sharapov" set HeaderString=%HeaderString%;"Email : [email protected]" set HeaderString=%HeaderString%;"Phone : +7 903 231-11-26" : Start set True=1 set False=0 set Ok=0 set Failed=1 set ThisGowinSearchCableBatchIsCalled=%False% if not "%1" == "" set ThisGowinSearchCableBatchIsCalled=%True% if %ThisGowinSearchCableBatchIsCalled% == %True% goto Process color 0B mode con cols=140 lines=50 set ThisGowinSearchCableBatchDir=%~dp0 set "LogDirRelative=%ThisGowinSearchCableBatchDir%..\Log" for %%i in ("%LogDirRelative%") do set "LogDir=%%~fi" if not exist "%LogDir%" md "%LogDir%" set "Log=%LogDir%\%~n0.log" if exist "%Log%" del /q "%Log%" : PrintHeader for %%a in (%HeaderString%) do call :echo_out %%a call :echo_out "-------------------------------------" call :echo_out "%~n0 started at %time% %date%" : Process set "GowinProgGetPathBat=%ThisGowinSearchCableBatchDir%GowinProgGetPath.bat" if not exist "%GowinProgGetPathBat%" ( call :Echo_out "Error: file %GowinProgGetPathBat% not exists" set ERROR_CODE=%Failed% goto Done ) call :Echo_out "GowinProgGetPathBat = %GowinProgGetPathBat%" call "%GowinProgGetPathBat%" GowinProgPath if %errorlevel% neq %Ok% ( call :Echo_out "%GowinProgGetPathBat% failed and returned %errorlevel%" set ERROR_CODE=%Failed% goto Done ) call :Echo_out "%GowinProgGetPathBat% done" if "%GowinProgPath%" == "" goto GowinProgGetPathBatError goto Process : GowinProgGetPathBatError call :Echo_out "Error: %GowinProgGetPathBat% failed" set ERROR_CODE=%Failed% goto Done : Process call :Echo_out "GowinProgPath = %GowinProgPath%" set "GowinProgCLIExe=%GowinProgPath%\programmer_cli.exe" if not exist "%GowinProgCLIExe%" ( call :Echo_out "Error: file %GowinProgCLIExe% not exists" set ERROR_CODE=%Failed% goto Done ) call :Echo_out "GowinProgCLIExe = %GowinProgCLIExe%" :: usage: programmer_cli.exe [-h] [--device <GWxx-x>] [--operation_index <int>] :: [--chain_index <int>] [--chain_size <int>] :: [--chain_ir <string>] [--frequency <string>] :: [--fsFile bitstream.fs] [--acFile ac.bin] :: [--csrFile csr.bin] [--mcuFile mcu.bin] :: [--fiFile userflash.fi] [--spiaddr 0x000000] :: [--output output.txt] :: [--key 00000000-00000000-00000000-00000000] :: [--keyread] [--keywrite] [--keylock] :: [--mfgiref data[9:0]] [--svfcreate] [--vme] :: [--svf_frequency <float>] [--channel <int>] :: [--location <int>] [--uid UID] [--lpt_address <int>] :: [--cable "Gowin USB CableFT2CH"] :: [--cable-index <int>] [--scan-cables] [--scan] :: [--filestransform <int>] [--files <string>] :: [--read-otp-addr] [--save-otp-addr] :: [--i2c-addr 1010000] :: If there's no Gowin cable programmer_cli.exe --scan-cables returns :: Cost 0.0 second(s) :: If case there is Gowin cable programmer_cli.exe --scan-cables returns :: Cable found: Gowin USB Cable(FT2CH)/0/324/GW-7qrVl (USB location:324) (SN: GW-7qrVl) :: Cost 0.06 second(s) set CableFlag="" for /f "usebackq tokens=5 delims= " %%a in (`"%GowinProgCLIExe%" --scan-cables`) do ( set CableFlag=%%a ) if %CableFlag% neq "" ( call :Echo_out "Gowin cable is found" goto QueryCable ) call :Echo_out "No Gowin cable is found" set ERROR_CODE=%Failed% goto Finish : QueryCable :: Cable found: Gowin USB Cable(FT2CH)/0/324/GW-7qrVl (USB location:324) (SN: GW-7qrVl) for /f "usebackq tokens=6-9 delims=:/() " %%a in (`"%GowinProgCLIExe%" --scan-cables`) do ( set Type=%%a set Channel=%%b set USBLocation=%%c set SerialNumber=%%d ) set ERROR_CODE=%Ok% : Done if %ThisGowinSearchCableBatchIsCalled% == %False% goto Finish set "%1=%Type%" set "%2=%Channel%" set "%3=%USBLocation%" set "%4=%SerialNumber%" exit /b %ERROR_CODE% : Finish if %CableFlag% neq "" ( call :Echo_out "Gowin USB Cable parameters :" call :Echo_out "Type = %Type%" call :Echo_out "Channel = %Channel%" call :Echo_out "USBLocation = %USBLocation%" call :Echo_out "SerialNumber = %SerialNumber%" ) call :Echo_out "%~nx0 done" pause exit : Echo_out echo %1 echo %1 >> "%Log%" exit /b Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zig 31 26 ноября, 2022 Опубликовано 26 ноября, 2022 · Жалоба Круто. Добавьте в начале батника setlocal, а в конце endlocal. Без этого у вас в системе будет установлено много лишних переменных окружения. И ещё. Чтобы дважды не вызывать GowinProgCLIExe можно попробовать вернуть результат её выполнения в переменную и проверять её. И ещё можно посмотреть результат вызова GowinProgCLIExe в переменной %errorlevel% Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zversky 16 26 ноября, 2022 Опубликовано 26 ноября, 2022 · Жалоба 5 часов назад, Zig сказал: Добавьте в начале батника setlocal, а в конце endlocal. А как оперировать с этими set- и endlocal, если один батник вызывает другой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться