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

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

moh3 01-05-2022 14:03 2984172

Создать BAT для вывода значения в консоль по условию
 
Добрый день.

Помогите пожалуйста создать BAT-скрипт по условию.

Есть файл со значениями
Скрытый текст


[\SPIDER-03_Canon LBP6020]
names_comp=\SPIDER-03
name_print=Canon LBP6020
data_update=30.04.2022
all_caunt=20
all_caunt_old=20
caunt_other_cartridg=19
cartridg_caunt=0
last_load_print=0
[\SPIDER-02_HP LaserJet M14-M17 PCLmS]
names_comp=\SPIDER-02
name_print=HP LaserJet M14-M17 PCLmS
data_update=30.04.2022
all_caunt=2
all_caunt_old=2
caunt_other_cartridg=0
cartridg_caunt=0
last_load_print=0



Условие:
Если "names_comp=\SPIDER-03" и "name_print=Canon LBP6020" то вывести в консоль число из "caunt_other_cartridg", которое в данный момент равно 19.

А если поменять условие на:
"names_comp=\SPIDER-02" и "name_print=HP LaserJet M14-M17 PCLmS", то вывести в консоль число из "caunt_other_cartridg", которое в данный момент равно 0

megaloman 02-05-2022 07:30 2984227

Если выдать принтер по задаваемому условию, то:
Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\printer.txt"

        Set "names_comp=\SPIDER-03"
        Set "name_print=Canon LBP6020"

        Set /A N=100
        FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul FindStr /I /C:"names_comp" /C:"name_print" /C:"caunt_other_cartridg" "%FileIn%"`) DO (
                If /I "%%i"=="names_comp" (Set /A N+=1 &Set "Out=")
                Call Set "Out=%%Out%%%%j "
                Call Set "@@%%N%%=%%Out%%"
        )
        FOR /F "usebackq tokens=2 delims==" %%i IN (`2^>nul Set "@@" ^|FindStr /I /C:"%names_comp% %name_print%"`) DO Echo %%i
Pause
Exit /B 0

Если отобразить все принтеры, то:
Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\printer.txt"

        Set /A N=100
        FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul FindStr /I /C:"names_comp" /C:"name_print" /C:"caunt_other_cartridg" "%FileIn%"`) DO (
                If /I "%%i"=="names_comp" (Set /A N+=1 &Set "Out=")
                Call Set "Out=%%Out%%%%j "
                Call Set "@@%%N%%=%%Out%%"
        )
        FOR /F "usebackq tokens=2 delims==" %%i IN (`2^>nul Set "@@"`) DO Echo %%i
Pause
Exit /B 0


moh3 02-05-2022 15:49 2984251

Спасибо огромное!
Работает безупречно!

В принципе мне только необходимо вывод числа из переменной "caunt_other_cartridg" без вывода названий принтеров.
Сделал по Вашему коду так:
Скрытый текст
Код:


@Echo Off
cls
        Set "FileIn=FileIn=Z:\Box_In\printer.txt"

        Set "names_comp=\SPIDER-02"
        Set "name_print=HP LaserJet M14-M17 PCLmS"

        Set /A N=100
        FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul FindStr /I /C:"names_comp" /C:"name_print" /C:"caunt_other_cartridg" "%FileIn%"`) DO (
                If /I "%%i"=="names_comp" (Set /A N+=1 &Set "Out=")
                Call Set "Out=%%Out%%%%j "
                Call Set "@@%%N%%=%%Out%%"
        )
        FOR /F "usebackq tokens=2 delims==" %%i IN (`2^>nul Set "@@" ^|FindStr /I /C:"%names_comp% %name_print%"`) DO set str=%%i
        set d=%str:~37,40%
        Echo %d%
Pause
Exit /B 0



Нормально или лучше как-то по другому организовать вывод?

megaloman 02-05-2022 16:12 2984253

moh3, Это плохая идея отрезать кусок строки - в зависимости от исходных данных её длина разная.
Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\printer.txt"

        Set "names_comp=\SPIDER-03"
        Set "name_print=Canon LBP6020"

rem        Set "names_comp=\SPIDER-02"
rem        Set "name_print=HP LaserJet M14-M17 PCLmS"

        Set /A N=100
        FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul FindStr /I /C:"names_comp" /C:"name_print" /C:"caunt_other_cartridg" "%FileIn%"`) DO (
                If /I "%%i"=="names_comp" (Set /A N+=1 &Set "Out=")
                Call Set "Out=%%Out%%%%j="
                Call Set "@@%%N%%=%%Out%%"
        )
        FOR /F "usebackq tokens=4 delims==" %%i IN (`2^>nul Set "@@" ^|FindStr /I /C:"%names_comp%=%name_print%="`) DO Set "caunt_other_cartridg=%%i"
        Echo %caunt_other_cartridg%
Pause
Exit /B 0


moh3 12-05-2022 11:51 2984910

Спасибо огромное, все работает отлично!


Время: 03:16.

Время: 03:16.
© OSzone.net 2001-