Scripting 如何计算cmd文件的调用次数?

Scripting 如何计算cmd文件的调用次数?,scripting,batch-file,cmd,Scripting,Batch File,Cmd,如何计算cmd文件的调用次数 我正在努力解决类似的问题,但没有成功: @IF NOT EXIST Calls.log echo. > Calls.log @for %%i in (Calls.log) do set size=%%~zi @IF %size% EQU 0 ( @ECHO 1 > Calls.log ) ELSE ( @set /p v=<Calls.log @set /A v+=1 @echo %v% > Calls.log ) @如果不存在Call

如何计算cmd文件的调用次数

我正在努力解决类似的问题,但没有成功:

@IF NOT EXIST Calls.log echo. > Calls.log 
@for  %%i in (Calls.log) do set size=%%~zi
@IF %size% EQU 0 (
@ECHO 1 > Calls.log
) ELSE (
@set /p v=<Calls.log
@set /A v+=1
@echo %v% > Calls.log
)
@如果不存在Calls.log echo.>Calls.log
@对于%%i in(Calls.log)do set size=%%~zi
@如果%size%eq为0(
@ECHO 1>Calls.log
)否则(
@set/p v=Calls.log
)

立即解析完整的
if
块,因此在执行
if
块之前,其中的所有环境变量都将被其值替换。您需要启用延迟变量扩展并使用
!v

@setlocal enabledelayedexpansion
@IF NOT EXIST Calls.log echo. > Calls.log
@for  %%i in (Calls.log) do set size=%%~zi
@IF %size% EQU 0 (
    @ECHO 1 > Calls.log
) ELSE (
    @set /p v=<Calls.log
    @set /A v+=1
    @echo !v! > Calls.log
)
@setlocal enabledelayedexpansion
@如果不存在,则调用.log echo.>Calls.log
@对于%%i in(Calls.log)do set size=%%~zi
@如果%size%eq为0(
@ECHO 1>Calls.log
)否则(
@set/p v=Calls.log
)
您可以将代码简化如下:

@echo off
setlocal enabledelayedexpansion
IF NOT EXIST Calls.log (
    ECHO 1 > Calls.log
) ELSE (
    set /p v=<Calls.log
    set /A v+=1
    echo !v! > Calls.log
)
@echo关闭
延迟扩展
如果不存在,则调用.log(
ECHO 1>Calls.log
)否则(
set/p v=Calls.log
)

无需事先创建文件(甚至我会使用
copy nul Calls.log
解决这个问题,因为这样可以确保文件大小为0)。

以下代码在我的计算机上工作:

@if not exist Calls.log (
echo 0 > Calls.log
)
@set /p v=< Calls.log
@set /a v=v+1
echo %v% > Calls.log
@如果不存在Calls.log(
echo 0>Calls.log
)
@set/pv=Calls.log

如果您所要做的只是计算cmd脚本被调用的次数,那么您可以在每次运行时将一个字符附加到文件中,而不是在每次运行脚本时对表达式求值进行调整。这还具有使脚本更快的优点,因为对计数的分析被移到别处

计数器文件每次扩展一个字节,因此请注意,如果调用它的次数太多,因为该文件将扩展。但即使每秒调用一次,1G文件也只能在30年后累积

在脚本的顶部,只需放置:

set >>countfile.txt <nul: /p x=X
要重置计数,请使用以下极其复杂的命令(我正在考虑申请专利):


我建议的另一件事是,您不需要在每个命令前面加“
@
”前缀来防止回显,您只需在脚本顶部加上“
@echo off
”即可实现全局无回显。如果您想有选择地响应某些命令,请忽略此段落。

不客气。在这种情况下,可以选择接受答案:)
    @echo off
    goto :main
:getsize
    echo %~z1
    goto :eof
:main
    setlocal enableextensions enabledelayedexpansion
    call :getsize countfile.txt
    endlocal
del countfile.txt