Board logo

标题: 计数的问题 [打印本页]

作者: scriptor     时间: 2007-1-1 12:11    标题: 计数的问题


怎么写一个批处理,让他自动的记住是第几次运行?


作者: youxi01     时间: 2007-1-1 12:32
将运行次数写进一个文件或注册表吧

作者: scriptor     时间: 2007-1-1 12:46
不能在P中实现吗,不改写注册表,不用另外的文件?

作者: youxi01     时间: 2007-1-1 12:53
当然也可以,不过稍微麻烦一点

作者: scriptor     时间: 2007-1-1 13:11
那就请贴代码

谢谢

作者: zh159     时间: 2007-1-1 16:25
必须在批处理最后一行换行为空行

1、最简单的办法,在批处理中加入:
set/p=:<nul>>%~nx0

计算“:”的个数

2、显示当前运行次数:
@echo off
for /f "tokens=1,2* delims=:" %%i in ('findstr /nv "`" %~nx0') do set /a N=%%i-1
for /f "skip=%N% delims=" %%i in (%~nx0) do (
for %%n in (%%i) do set /a %%n+=1)
set /a :+=1
echo.&echo. 第 %:% 运行。&echo.
set/p=: <nul>>%~nx0
pause
exit



作者: scriptor     时间: 2007-1-2 01:07

Many Thanks

Happy New Year

作者: scriptor     时间: 2007-1-2 01:09
调试了
很好的

不过还要研究一下,我还没有仔细看代码

先谢谢了

作者: scriptor     时间: 2007-1-7 02:28
那个代码由问题啊

只能记到2
往后就总是2,谁来解决??

作者: jmz573515     时间: 2007-1-7 04:55
是不是可以用VBS写一个,怪我无知,汗~~

Last edited by jmz573515 on 2007-1-22 at 10:16 PM ]

作者: scriptor     时间: 2007-1-7 04:59
waw。。。

又来了一个vbs的

呵呵。。。。
好的,谢谢。

作者: scriptor     时间: 2007-1-7 05:00
能不能只用BAT的格式把这个问题解决阿?
谢谢

作者: namejm     时间: 2007-1-7 05:18
  演示代码:

@echo off
:: 只有在不关闭这个脚本的情况下才能计数
:loop
cls
set /a num+=1
echo 这是第 %num% 次运行
pause
goto loop

作者: scriptor     时间: 2007-1-7 05:37
我要的不是这个情况,我说的是每次运行就一次数

怎么实现?只用bat

作者: dikex     时间: 2007-1-7 05:43
echo 内容 >> 批处理自身
使用这个就可以了
原理大致这样,有兴趣作出一些修正之类的

Last edited by dikex on 2007-1-6 at 04:45 PM ]

作者: jmz573515     时间: 2007-1-7 05:52
我写的这个VBS原理是这样的。
读取tmp.txt这个文件,如果没有则表示第一次运行,就建立tmp.txt这个文件在里面输入“1”。
如果有就读取里面的“1”之后再加上1,重新写入这个文件。并且显示运行第几次。(跟据tmp.txt里的数字显示)

BAT怎么写,这实在是门外汉无能为力。:(
在这写上我的思路,仅供参考。

作者: 9527     时间: 2007-1-7 05:53
其实这种方法并不好,如果退出当前CMD SHELL无效,已经定义了变量A无效,还在寻求最佳方案

@echo off
if not defined a (set a=1) else (set/a a=%a%+1)
echo P处理运行了%a%次


Last edited by 9527 on 2007-1-7 at 05:54 AM ]

作者: namejm     时间: 2007-1-7 06:24
  不使用注册表或者临时文件而计算运行次数的话,不仅批处理办不到,其他的语言也是不可能办到的,因为始终要把使用次数放到某个不容易丢失数据的地方保存起来,以便下次运行的时候把它读取出来——BTW,把这个使用次数放到批处理文件自身也可以看作是使用了临时文件,只不过是变相地使用而已。

作者: vkill     时间: 2007-1-7 08:15
Originally posted by namejm at 2007-1-7 06:24:
  不使用注册表或者临时文件而计算运行次数的话,不仅批处理办不到,其他的语言也是不可能办到的,因为始终要把使用次数放到某个不容易丢失 ...

同意

作者: scriptor     时间: 2007-1-7 10:07
既然都这么说,,那就暂时结束。嘿嘿

作者: zh159     时间: 2007-1-7 13:11
我 6 楼的代码有个缺点:批处理文件名不能包含有空格
改进可以包含空格:

@echo off
for /f "tokens=1,2* delims=:" %%i in ('findstr /nv "`" "%~nx0"') do set /a N=%%i-1
for /f "skip=%N% delims=" %%i in ('type "%~nx0"') do (
for %%n in (%%i) do set /a %%n+=1)
set /a :+=1
echo.&echo. 第 %:% 运行。&echo.
set/p=: <nul>>"%~nx0"
pause
exit



文件名不能包含有特殊符号!
编好后的的批处理必须在最后一行换行为空行
XP SP2测试通过

Last edited by zh159 on 2007-1-7 at 12:15 AM ]

作者: 26933062     时间: 2007-1-7 13:42
没注意看已经有好方法了,呵呵

Last edited by 26933062 on 2007-1-7 at 12:48 AM ]

作者: scriptor     时间: 2007-1-8 01:53
好了,很好的

是不是加一个'type "%~nx0"'就可以处理含有空格的文件名阿?