如何计算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
)
答案 0 :(得分:2)
如果您要做的只是计算cmd脚本被调用的次数,您可以在每次运行时将一个字符附加到文件,而不是每次运行脚本时都要进行表达式评估。这也有利于使脚本更快,因为计数的分析被移动到其他地方。
计数器文件每次都会扩展一个字节,因此请注意,如果您正在调用它,因为文件将会扩展。但即使是每秒调用一次,1G文件也只会在30年后产生。
在脚本的顶部,只需输入:
set >>countfile.txt <nul: /p x=X
每次调用脚本时,这只会将X
字符添加到countfile.txt
文件的末尾。它使用带有输入/输出重定向的“set/p
”命令,这是我知道在没有CR / LF的情况下获取字符的唯一方法(如UNIX“echo -n
” )。
要计算到目前为止的调用次数,您可以使用文件大小环境变量修饰符,如下面的脚本(我希望这样做比运行脚本更少,所以最好放置grunt在这里工作[事实上,它不是很多繁琐的工作,因为它不计算字符,而是直接从目录条目中获取信息]):
@echo off
goto :main
:getsize
echo %~z1
goto :eof
:main
setlocal enableextensions enabledelayedexpansion
call :getsize countfile.txt
endlocal
要重置计数,请使用以下非常复杂的命令(我正在考虑申请专利):
del countfile.txt
我建议的另一件事 - 您不需要为每个命令添加“@
”前缀以防止回声,您只需将“@echo off
”放在脚本的顶部即可全球无回声。如果您想有选择地回显某些命令,请忽略此段落。
答案 1 :(得分:1)
立即解析完整的if
块,因此其中的所有环境变量将在 {/ 1}}块执行之前的时被其值替换。您需要启用延迟变量扩展并使用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
)
不需要事先创建文件(甚至我用@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
)
解决,因为这样可以确保文件大小为0)。
答案 2 :(得分:0)
以下代码适用于我的计算机:
@if not exist Calls.log (
echo 0 > Calls.log
)
@set /p v=< Calls.log
@set /a v=v+1
echo %v% > Calls.log