Войти

Показать полную графическую версию : [решено] Создать BAT для вывода значения в консоль по условию


moh3
01-05-2022, 14:03
Добрый день.

Помогите пожалуйста создать 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
@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
Спасибо огромное!
Работает безупречно!

В принципе мне только необходимо вывод числа из переменной "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
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
Спасибо огромное, все работает отлично!




© OSzone.net 2001-2012