Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] запустить счетчик по условию (команде)

Ответить
Настройки темы
CMD/BAT - [решено] запустить счетчик по условию (команде)

Ветеран


Сообщения: 1274
Благодарности: 564


Конфигурация

Профиль | Отправить PM | Цитировать


Допустим такой вариант:

Код: Выделить весь код
@echo off
set [=
for %%a in (a b c d e f d h i) do call :# "%%a"
pause
 
:#
 set/a m+=1
 if "%~1"=="d" if not defined [ set [=]& echo Запуск set/a n+=1
 echo %n% %m%
exit /b
надо запустить в этой же итерации еще один счетчик с отставанием по-отношению к первому (он должен запускаться итерацией) или (на крайний случай - не желательно) срыв по определенной (той же) команде. Первый счетчик работает весь шаг на увеличение, его трогать нельзя, использовать можно. Условие (может быть несколько соответствий) должно пропустить только первую выборку (в примере d повторяется) и запуск счетчика должен произойти единожды и далее работать на увеличение уже независимо.

Требуется примерно:

счет по команде
...................: a b c d e f d h i
set/a m+=1: 1 2 3 4 5 6 7 8 9
set/a n+=1 : 0 0 0 1 2 3 4 5 6

или прерывание по команде
...................: a b c d e f d h i
set/a m+=1: 1 2 3 4 5 6 7 8 9
set/a n+=1 : 1 2 3 0 1 2 3 4 5

идет счет (допустим имен файлов) на увеличение
1 2 3 4 5 6 7 8 9
на каком-то этапе счета наступает условие (нашли нужное имя (а может после него и еще такое же быть)) и по его однократному выполнению, не прекращая основного счета, начинается новый счет
основной 1 2 3 4 5 6
....новый 0 0 1 2 3 4
до начала нового счета необязательно нули, может быть ничего или единицы, но не более
не обязательно два счетчика, если это сделает один, как-то хитро узнавая сколько надо отнимать и выдавать разницу (вывод отдельной переменной)
1 2 3 4 5 6 7 8 9
(отнимаем 5 с нужного места, а именно после 5ти - произошло условие в это время)
0 0 0 0 0 1 2 3 4
но как это сделать?

Отправлено: 22:06, 22-02-2017

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Я что-то не пойму, в чём проблема. Вроде ж всё должно работать, не?
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set /a iCountTotal = 0
set /a iCountAdd   = 0
set /a iCountReset = 0

for %%i in (a b c d e f d h i) do call :Sub "%%~i"

endlocal
exit /b 0
 
:Sub
	set /a iCountTotal += 1

	if /i "%~1" equ "d" (
		set /a iCountAdd += 1
		set /a iCountReset = 0
	) else (
		set /a iCountReset += 1
	)

	echo [%~1] [%iCountTotal%] [%iCountAdd%] [%iCountReset%]

	exit /b
Цитата:
Код: Выделить весь код
[a] [1] [0] [1]
[b] [2] [0] [2]
[c] [3] [0] [3]
[d] [4] [1] [0]
[e] [5] [1] [1]
[f] [6] [1] [2]
[d] [7] [2] [0]
[h] [8] [2] [1]
[i] [9] [2] [2]
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:59, 22-02-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Iska,
надо вот так
Код: Выделить весь код
[a] [1] [0] [1]
[b] [2] [0] [2]
[c] [3] [0] [3]
[d] [4] [1] [0]
[e] [5] [2] [1]
[f] [6] [3] [2]
[d] [7] [4] [3]
[h] [8] [5] [4]
[i] [9] [6] [5]
почему-то когда добавляю второе условие (нужна сработка один раз, только по первой "d")
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set /a iCountTotal = 0
set /a iCountAdd   = 0
set /a iCountReset = 0
set s=

for %%i in (a b c d e f d h i) do call :Sub "%%~i"

endlocal
pause& exit
 
:Sub
	set /a iCountTotal += 1

	if /i "%~1" equ "d" if not defined s (
                set s=true
		set /a iCountAdd += 1
		set /a iCountReset = 0
	) else (
		set /a iCountReset += 1
	)

	echo [%~1] [%iCountTotal%] [%iCountAdd%] [%iCountReset%]>>"file.txt"

	exit /b
вывод вообще портится
Код: Выделить весь код
[a] [1] [0] [0]
[b] [2] [0] [0]
[c] [3] [0] [0]
[d] [4] [1] [0]
[e] [5] [1] [0]
[f] [6] [1] [0]
[d] [7] [1] [1]
[h] [8] [1] [1]
[i] [9] [1] [1]
в идеале достаточно этого
Код: Выделить весь код
[a] [1] [0]
[b] [2] [0]
[c] [3] [0]
[d] [4] [1]
[e] [5] [2]
[f] [6] [3]
[d] [7] [4]
[h] [8] [5]
[i] [9] [6]

Последний раз редактировалось alpap, 23-02-2017 в 01:25.


Отправлено: 01:17, 23-02-2017 | #3


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата alpap:
надо вот так »
Кажись, начал понимать. По условию однократно запускается начало отсчёта. Можно попробовать так:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set /a iCountTotal = 0
rem set /a iCountAdd   = 0
set /a iCountReset = 0

for %%i in (a b c d e f d h i) do call :Sub "%%~i"

endlocal
exit /b 0
 
:Sub
	set /a iCountTotal += 1

	if /i "%~1" equ "d" (
		set /a iCountReset = 0
		if not defined iCountAdd set /a iCountAdd = 0
	) else (
		set /a iCountReset += 1
	)

	if defined iCountAdd set /a iCountAdd += 1

	echo [%~1] [%iCountTotal%] [%iCountAdd%] [%iCountReset%]

	exit /b
Цитата:
Код: Выделить весь код
[a] [1] [] [1]
[b] [2] [] [2]
[c] [3] [] [3]
[d] [4] [1] [0]
[e] [5] [2] [1]
[f] [6] [3] [2]
[d] [7] [4] [0]
[h] [8] [5] [1]
[i] [9] [6] [2]

— если Вас устроит пустота в выводе. Если нет — потребуется ещё одна булева переменная, отвечающая за начало отсчёта, например, так:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set /a iCountTotal = 0
set /a iCountAdd   = 0
set /a iCountReset = 0
set /a boolStartCount = 0

for %%i in (a b c d e f d h i) do call :Sub "%%~i"

endlocal
exit /b 0
 
:Sub
	set /a iCountTotal += 1

	if /i "%~1" equ "d" (
		set /a iCountReset = 0
		set /a boolStartCount = 1
	) else (
		set /a iCountReset += 1
	)

	if %boolStartCount% equ 1 set /a iCountAdd += 1

	echo [%~1] [%iCountTotal%] [%iCountAdd%] [%iCountReset%]

	exit /b
Цитата:
Код: Выделить весь код
[a] [1] [0] [1]
[b] [2] [0] [2]
[c] [3] [0] [3]
[d] [4] [1] [0]
[e] [5] [2] [1]
[f] [6] [3] [2]
[d] [7] [4] [0]
[h] [8] [5] [1]
[i] [9] [6] [2]


Но мне непонятен Ваш третий столбец. Почему у Вас здесь:
Код: Выделить весь код
[d] [7] [4] [3]
в примере, как должно быть, при втором появлении d, не происходит оговоренного сброса третьего счётчика?!
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:50, 23-02-2017 | #4


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Iska,
Вот Спасибо!
Первый код под спойлером именно то что нужно, а то я уже начал думать что это нереально.

мне этого достаточно для дальнейших своих действий:
Код: Выделить весь код
@echo off
setlocal
 set/a m=0
 for %%a in (a b c d e f d h i) do call :# "%%a"
endlocal
pause& exit
 
:#
 set/a m+=1
 if "%~1"=="d" if not defined n set/a n=0
 if defined n set/a n+=1
 echo %m% %n%
exit /b

Отправлено: 03:56, 23-02-2017 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] запустить счетчик по условию (команде)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Система - [решено] Удаление программ по сети, не отображающиеся по команде WMIC DJ Mogarych Программное обеспечение Windows 10 04-02-2015 00:48
CMD/BAT - [решено] Запуск приложения по условию DR_WELL Скриптовые языки администрирования Windows 2 29-11-2012 21:20
Доступ - Расшаривание папок по условию aleksey_m Microsoft Windows 2000/XP 8 06-03-2009 09:07
[решено] Help помогите с заданием по *nix по команде map cp ??? Ufo_log Программирование в *nix 2 17-12-2007 19:55
Скрипт по условию. Butunin Klim Программное обеспечение Windows 7 18-08-2006 09:37




 
Переход