Перейти к содержанию
    

Gowin programmer_cli вывод - как обработать?

Батник в виде

@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

как выцарапать из его вывода выводимые им данные, чтобы обработать их в том же батнике ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Например, с помощью средств PowerShell. bat-файлы это прошлый век и пора использовать более современные средства.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 минут назад, Zversky сказал:

Да, спасибо. Настала пора переходить.

Если у вас где-то используется Python или TCL, то на них можно сделать более переносимый вариант, т.к. лично мне в PowerShell не нравится его плохая переносимость. В этом плане Python или TCL (tclsh) выглядят практически идеальным вариантом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, makc сказал:

В этом плане Python или TCL (tclsh) выглядят практически идеальным вариантом.

Python знаю, но здесь, по кр. мере, не использую, TCL же использую при моделировании в QuestaSim, но как его сюда прикрутить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, Zversky сказал:

TCL же использую при моделировании в QuestaSim, но как его сюда прикрутить?

Ставите интерпретатор из https://www.tcl.tk/software/tcltk/bindist.html и далее пишете скрипт, который запускает что нужно и парсит выхлоп. Для TCL есть прекрасная библиотека expect, которая позволяет упростить парсинг с помощью простого задания сигнатур и реакций на них.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 /?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

55 минут назад, Zig сказал:

Описание команды for можно посмотреть набрав в командной строке: for /?

Спасибо огромное: я обязательно попробую, уже чувствуя на себе неодобрительные выводы господина модератора и моих коллег, которые давно направляли меня в будущее. Но и в будущее я уже смотрю довольно уверенно, о чём непременно доложусь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, из серии "Гора родила мышь или ногами не пинать"
 

Спойлер
@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 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Круто.

Добавьте в начале батника setlocal, а в конце endlocal. Без этого у вас в системе

будет установлено много лишних переменных окружения.

И ещё. Чтобы дважды не вызывать GowinProgCLIExe можно попробовать вернуть результат её выполнения в переменную и проверять её.

 

И ещё можно посмотреть результат вызова GowinProgCLIExe в переменной %errorlevel%

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, Zig сказал:

Добавьте в начале батника setlocal, а в конце endlocal.

А как оперировать с этими set- и endlocal, если один батник вызывает другой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...