Если все, что вы пытаетесь сделать, это подсчитать, сколько раз вызывается сценарий cmd, вы можете просто добавлять один символ в файл каждый раз, когда он выполняется, вместо того, чтобы возиться с оценкой выражения при каждом запуске сценария. Это также имеет преимущество, заключающееся в том, что скрипт становится быстрее, так как анализ счетчика перемещен в другое место.
Файл счетчика расширяется на один байт каждый раз, так что будьте осторожны, если вы вызываете его действительно большое количество раз, так как файл будет расширяться. Но даже, вызывая его один раз в секунду, файл 1G будет накапливаться только через 30 лет.
В верхней части вашего сценария просто поставьте:
set >>countfile.txt <nul: /p x=X
Это просто добавляет символ X
в конец файла countfile.txt
каждый раз, когда вызывается скрипт. Он использует команду "set/p
" с перенаправлением ввода / вывода, что является единственным способом, которым я знаю, чтобы вывести символ без CR / LF после него (как UNIX "echo -n
").
Чтобы подсчитать количество вызовов на сегодняшний день, вы можете использовать модификатор переменной окружения размера файла, как в следующем скрипте (я ожидаю, что это будет происходить реже, чем запуск скрипта, поэтому лучше поставить хрюк работать здесь [на самом деле, это не много тяжелой работы, поскольку она не считает символы, скорее она получает информацию непосредственно из записи каталога]):
@echo off
goto :main
:getsize
echo %~z1
goto :eof
:main
setlocal enableextensions enabledelayedexpansion
call :getsize countfile.txt
endlocal
Чтобы сбросить счетчик, используйте следующую чрезвычайно сложную команду (я думаю запатентовать это):
del countfile.txt
Еще одна вещь, которую я бы предложил - вам не нужно ставить перед каждой командой префикс "@
" для предотвращения эха, вы можете просто поставить "@echo off
" в верхней части вашего скрипта для глобального no-echo , Если вы хотите выборочно отображать некоторые команды, просто игнорируйте этот параграф.