Создать 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
|
Если выдать принтер по задаваемому условию, то:
Код:
@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
|
Спасибо огромное!
Работает безупречно!
В принципе мне только необходимо вывод числа из переменной "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
Нормально или лучше как-то по другому организовать вывод?
|
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
|
Спасибо огромное, все работает отлично!
|
Время: 03:16.
© OSzone.net 2001-