Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 21.05.2022
Сообщений: 14

Как поставить счетчик количества обращений батника 1.cmd к батнику 2.cmd?

12.06.2022, 13:19. Показов 1359. Ответов 13

Студворк — интернет-сервис помощи студентам
Как поставить счетчик количества обращений батника 1.cmd к батнику 2.cmd?

Упрощенно-
Создал переменную в 2.cmd

батник 2.cmd:
@echo off
for...(
If ()
)
<some code >
set /a Count=1
echo "Count in 2.cmd: %Count%" <Честно присваивает локально: "Count in 2.cmd: 1">
exit /b

в 1.cmd присваиваю возврат

батник 1.cmd:
@echo off
set /a TotCount=0
<some code>
call 2.cmd Arg1 Arg2..
set /a TotCount=%TotCount% + %Count%
echo "TotCount=%TotCount% + %Count%" <Выдает "TotCount= 0 + 1" и так далее>

В этом варианте всё работает, но как только в коды батников вставяю циклы с локальными переменными типа

FOR /F "tokens=2-5 delims=," %%X IN (%Myfile%.tm) DO (
<some code>
if /i "!Temper_1:~14,2!" GTR "90" (
<some code>
)

перестает возвращать переменную
echo "TotCount=%TotCount% + %Count%" <Выдает "TotCount= 0 + " или пишет 'Argument not found'>
После нескольких циклов в 1.cmd, даже TotCount теряет "TotCount= + ", если ее явно не присвоить в цикле:
If %Count% NEQ 1 set /a TotCount=0

Скакал вокруг костра, с Setlocal Enable/Diasable и с !var! всесто %var%, но просветление так и не пришло.
Добавлю, что есть несколько обращений из 1.cmd к другим батникам-подпрограммам
Что я упускаю?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.06.2022, 13:19
Ответы с готовыми решениями:

Счетчик количества обращений - добавить вывод количества обращений за сегодня
Привет всем)) Есть счетчик который записывает данные файл. Хочу добавить чтобы он выводил не только общее число но и конкретно за...

Как из батника запустить cmd.exe от имени администратора с выполнением определённых команд?
Добрый день! Помогите, пожалуйста, решить следующую задачу: Регистрирую dll-библиотеки с помощью батника. Для того, чтобы они...

Задача на cmd с созданием батника
Написать командный файл, создающий текстовый файл с пронумерованными строками. Количество строк и имя файла передать в качестве аргументов...

13
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
12.06.2022, 14:05
Распишите конечный код, который нужен, из Вашей писанины ничего не понятно
0
2 / 2 / 0
Регистрация: 21.05.2022
Сообщений: 14
12.06.2022, 15:03  [ТС]
Там очень много кода, неимеющего отношения к вопросу.
Дело в том, что основной батник вызывает еще один на проверку условий, если условие выполняется, запускается третий батник из второго. В третьем батнике назначен счетчик set /a Count=1, который должен вернуть эту единицу в первый батник. Вот тут и заковырка. Значение не передается
0
 Аватар для Angry Old Man
3044 / 746 / 313
Регистрация: 26.03.2022
Сообщений: 1,397
Записей в блоге: 1
12.06.2022, 15:14
SkipperVV,
Цитата Сообщение от SkipperVV Посмотреть сообщение
Скакал вокруг костра
Раньше для этого была кнопка Reset. Без таких телодвижений методика может быть такой:
cmd1
Windows Batch file
1
2
3
4
5
6
7
8
9
@Echo Off
    Set /A Count=0
    For /L %%i In (1,1,10) Do (
        Call "Z:\Box_In\2.cmd" "Count"
        Call Echo %%Count%%
    )
Echo ==== %Count%
Pause
Exit /B 0
cmd2 (У меня "Z:\Box_In\2.cmd")
Windows Batch file
1
2
3
4
@Echo Off
    Set /A %~1+=1
    Call Echo %%%~1%%  cmd2
Exit /B
Цитата Сообщение от SkipperVV Посмотреть сообщение
Дело в том, что основной батник вызывает еще один на проверку условий, если условие выполняется, запускается третий батник из второго.
ИМХО, это заумно и не практично иметь несколько файлов.
Оформляйте Ваш код в одном файле процедурами.
2
2 / 2 / 0
Регистрация: 21.05.2022
Сообщений: 14
12.06.2022, 16:09  [ТС]
Большое спасибо. Я надеялся, что простой счеичик гораздо проще оформить. Я уже подумывалчерез txt файл запись/считать, но это очень уж нелепо.
0
 Аватар для volodin661
6796 / 2293 / 348
Регистрация: 10.12.2013
Сообщений: 7,920
12.06.2022, 16:28
Цитата Сообщение от SkipperVV Посмотреть сообщение
Что я упускаю?
Упускаешь самое главное.

Не ту страну назвали Гондурасом и не тот инструмент был выбран MS в прошлом веке в качестве командной оболочки.
Все он делает не так.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Начинает не сначала,
А кончает как попало.
 
С потолка он строит дом,
Носит воду решетом,
 
Солнце в поле ловит шапкой,
Тень со стен стирает тряпкой,
 
Дверь берет с собою в лес,
Чтобы вор к нему не влез,
 
И на крышу за веревку
Тянет бурую коровку
(c) Самуил Яковлевич

Добавлено через 4 минуты
Любой скриптовый язык готов предоставить пользователю в любой точке исполнения
полную информацию по стеку вызова; кто кого вызвал, с какими аргументами, в какой строке итд

Любой.
Но только не cmd.




powershell. например.
скрипт Script0 вызывает Script1

script0.ps1
PowerShell
1
./script1.ps1 A B C D E F
script1.ps1
PowerShell
1
2
"here"
(Get-PSCallStack).InvocationInfo
output:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
here
 
MyCommand             : script1.ps1
BoundParameters       : {}
UnboundArguments      : {A, B, C, D…}
ScriptLineNumber      : 1
OffsetInLine          : 1
HistoryId             : 22
ScriptName            : /Users/user/script0.ps1
Line                  : ./script1.ps1 A B C D E F
 
PositionMessage       : At /Users/sten/script0.ps1:1 char:1
                        + ./script1.ps1 A B C D E F
                        + ~~~~~~~~~~~~~~~~~~~~~~~~~
PSScriptRoot          : /Users/user
PSCommandPath         : /Users/user/script0.ps1
InvocationName        : ./script1.ps1
PipelineLength        : 1
PipelinePosition      : 1
ExpectingInput        : False
CommandOrigin         : Internal
DisplayScriptPosition :
 
MyCommand             : script0.ps1
BoundParameters       : {}
UnboundArguments      : {}
ScriptLineNumber      : 1
OffsetInLine          : 1
HistoryId             : 22
ScriptName            :
Line                  : ./script0.ps1
PositionMessage       : At line:1 char:1
                        + ./script0.ps1
                        + ~~~~~~~~~~~~~
PSScriptRoot          :
PSCommandPath         :
InvocationName        : ./script0.ps1
PipelineLength        : 1
PipelinePosition      : 1
ExpectingInput        : False
CommandOrigin         : Runspace
DisplayScriptPosition :
 
MyCommand             : ./script0.ps1
BoundParameters       : {}
UnboundArguments      : {}
ScriptLineNumber      : 0
OffsetInLine          : 0
HistoryId             : 22
ScriptName            :
Line                  :
PositionMessage       :
PSScriptRoot          :
PSCommandPath         :
InvocationName        :
PipelineLength        : 2
PipelinePosition      : 1
ExpectingInput        : False
CommandOrigin         : Runspace
DisplayScriptPosition :
0
2 / 2 / 0
Регистрация: 21.05.2022
Сообщений: 14
12.06.2022, 16:46  [ТС]
Мне надо опросить кучу сетевых машин, раздать команды, при необходимости, и вывести отчет. Я столкнулся с тем, что curl при обрашении к девайсам, сработал только с командной строки. Вот я на батниках и зацыклился. Скрипта много и переписывать лень, да и нет жизненной необходимости. Я, для красивкости, хотел добавить счетчик на вызов процедуры.
Более красиво и грамотно написал в bash под Linux, только надо прошить в девайсы. Вот жду когда. Пока под ДОСом работает.
Странно, что переменная теряется. ДОС не запускает новый процесс при вызове "функции"
0
 Аватар для Angry Old Man
3044 / 746 / 313
Регистрация: 26.03.2022
Сообщений: 1,397
Записей в блоге: 1
12.06.2022, 16:55
Лучший ответ Сообщение было отмечено SkipperVV как решение

Решение

SkipperVV, Где сложность? Проще некуда:
Windows Batch file
1
2
3
4
5
6
7
8
9
@Echo Off
    Set /A Count=0
    For /L %%i In (1,1,10) Do (
        Call Set /A Count+=1 &Call "Z:\Box_In\2.cmd" %%Count%%
        Call Echo CMD1 --- InFor=%%Count%%
    )
Echo ==== %Count%
Pause
Exit /B 0
Windows Batch file
1
2
3
@Echo Off
    Echo CMD2 +++ Count=%Count% Argument=%1
Exit /B
Если поубирать ненужные контрольные Echo - счетчик в одну строку

Или еще вариант
Windows Batch file
1
2
3
4
5
6
7
8
9
@Echo Off
    Set /A Count=0
    For /L %%i In (1,1,10) Do (
        Call "Z:\Box_In\2.cmd"
        Call Echo CMD1 --- InFor=%%Count%%
    )
Echo ==== %Count%
Pause
Exit /B 0
Windows Batch file
1
2
3
4
@Echo Off
    Set /A Count+=1
    Echo CMD2 +++ Count=%Count%
Exit /B
счетчик в одну строку, умейте его достать

Добавлено через 7 минут
Цитата Сообщение от SkipperVV Посмотреть сообщение
Странно, что переменная теряется.
Нигде не теряется, надо не скачкАми и ужимками заниматься, а делать правильно
2
2 / 2 / 0
Регистрация: 21.05.2022
Сообщений: 14
12.06.2022, 18:00  [ТС]
Я не программист. Я бывший капитан. Вот пришлось работу поменять. Осваиваю.

Добавлено через 45 минут
Большое спасибо. Не могли бы вы объяснить +++ и ---?
Я хочу вникнуть, а не просто скопировать код

Добавлено через 9 минут
Пардон, ++++ в эхе. Сразу не врубился
1
 Аватар для Angry Old Man
3044 / 746 / 313
Регистрация: 26.03.2022
Сообщений: 1,397
Записей в блоге: 1
12.06.2022, 18:05
SkipperVV,
Цитата Сообщение от SkipperVV Посмотреть сообщение
Не могли бы вы объяснить +++ и ---?
Взято с потолка. Обратите внимание, они в Echo, никакого действия в коде не делают, я сделал несколько Echo для контроля, чтобы Вы видели значение счетчика в разных местах. === +++ ---- надо только для понимания, какое Echo отработало, чтобы убедиться, что код работает и нигде ничего не теряется..
2
2 / 2 / 0
Регистрация: 21.05.2022
Сообщений: 14
12.06.2022, 18:18  [ТС]
Да, да... я уже извинился. Невнимателен.
Спасибо
1
2 / 2 / 0
Регистрация: 21.05.2022
Сообщений: 14
13.06.2022, 10:55  [ТС]
Здравствуйте
К сожалению, ваш код, в реальной программе, не просто опрашивает CMD2, а еще и запускает его, когда не надо, и всё равно возвращает 0
Echo CMD2 +++ Count=%Count% <Echo CMD2 +++ Count=0>
0
 Аватар для Angry Old Man
3044 / 746 / 313
Регистрация: 26.03.2022
Сообщений: 1,397
Записей в блоге: 1
13.06.2022, 11:24
Цитата Сообщение от SkipperVV Посмотреть сообщение
код, в реальной программе, не просто опрашивает CMD2, а еще и запускает его, когда не надо,
Это Ваш код в Вашей программе, я только предложил способ, что Вы с ним сделали - я не виноват ! Что Вы имеете ввиду "опрашивает CMD2"? Я понимаю задачу как она сформулирована
Цитата Сообщение от SkipperVV Посмотреть сообщение
поставить счетчик количества обращений батника 1.cmd к батнику 2.cmd
Господин шкипер! Вы взяли на борт лоцмана, завязали ему глаза, чтобы он не догадался, куда Вы плывёте, а потом претензии - ты завёл нас на мель!
Дайте Ваши реальные батники, всё, что не относится к подсчету удалите (нет большого желания разбираться в чужом коде), это надо видеть. Мои примеры все работают, надеюсь, Вы в этом убедились. Значит, ищем не у меня.
0
2 / 2 / 0
Регистрация: 21.05.2022
Сообщений: 14
13.06.2022, 20:50  [ТС]
Здравствуйте, Злой старый человек
Большое спасибо за плмощь.
Я таки добил этот вопрос противолодочным зигзагом с Setlocal-ами
...........
call set Temper_2=%%Y
echo Temper 2: !Temper_2:~14,2!
if /i "!Temper_2:~14,2!" GTR "90" (
echo Temper_2 "!Temper_2:~14,2!". SHUT DOWN
color CE
endlocal
set /a Shutdown=%Shutdown%+1
Setlocal EnableDelayedExpansion
call :ShutDown %IP% !Temper_2:~14,2!
)
Но я так и не понял, почему я не смог простой счетчик поставить в подпрограмме.
Можно я к вам буду по стариковски обращаться. Я тоже старый и совсем злой
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.06.2022, 20:50
Помогаю со студенческими работами здесь

Проблемы с запуском батника, пустое окно Cmd
Всем доброго времени суток. Копался на форуме, так и не нашел моей проблемы (есть похожие, но это немножко не то). Если по данной...

Как написать cmd создающий другой cmd
Добрый день. Смысл в том, чтобы создать CMD с настройками текущего ПК: имя компьютера и имя пользователя, чтобы потом применить эти же...

Восстановление значений cmd [cmd, ooov.net]
Здравствуйте, Столкнулся с такой проблемой, при запуске Windows открывался cmd и осуществлялся переход на сайт , Решил проблему...

Выполнили 1.cmd , потом отслеживаем 10мин движение мышки (или ещё какое бездействие системы) - если да то запуск 2.cmd
Сабж. Есть cmd файл: Work.cmd в нём нужно циклически запускать все cmd файлы - по порядку E:\temp\Work\111\run.cmd ...

Надо отследить когда консоли CMD. И когда CMD дает результат и запустить по этому событию python программу
Я увлёкся книгой Крейга Ричардсона 'программируем с Minecraft' (Она о том что есть модуль связывающий python и Minecraft, но для того того...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru