Scripting 如何计算cmd文件的调用次数?
如何计算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
@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