楼 主
再谈批处理记录本身历史运行次数
发表于 2008-03-29 04:12 · 中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105 发帖 1,276 注册 2008-03-08 13:00 18年会员 UID 112398 性别 男
状态 离线
谈批处理记录本身历史运行次数,实际上就是为了限制使用程序次数。经过自己n次尝试,用纯P来实现确实有点难度(起码对我来说),现在写下本人两种方法的小小总结,以供新人借鉴(老手们可不要笑话我啊):
第一种方法是生成临时文件,此文件在第一次运行时生成,可将其路径写的隐蔽点,如生成到系统文件夹system32中,如以下代码:
set puth=c:\windows\system32\ rem 设置路径
if exist %puth%a.txt goto run
cd . >%puth%a.txt
:run
set /p n=<%puth%a.txt rem 设置n值为a.txt第一行的数值
set /a n+=1 rem 运行一次数值n加上1
echo %n% >%puth%a.txt rem 重新输入a.txt中的数值
if %n% geq 10 goto :eof rem 如果n>=10结束运行
...................................
第二种方法(应是本人的原创)从批处理自身获取数值并更新数值,不用生成临时文件,但运行一次会在批处理最后增加一行字符(做了处理后不影响运行),如以下代码(批处理名为b.bat):
for /f "tokens=2" %%i in (b.bat) do (
set n=%%i rem 从批处理最后一行中获取数值
)
set /a n+=1 rem 运行一次数值n加上1
if %n% equ 10 goto :eof rem 如果n=10结束运行
echo goto %n% ^>nul 2^>nul >>b.bat rem 向批处理最后一行后添加数值
..................................................
goto 0 >nul 2>nul&goto :eof rem 最后一行
[ Last edited by zw19750516 on 2008-3-29 at 10:02 AM ]
本帖最近评分记录
(共 2 条)
点击查看详情
评分人 分数 时间
maidu
-2
2008-03-29 09:45
plp626
+4
2008-04-02 14:19
批处理之家新域名:www.bathome.net
第 2 楼
发表于 2008-03-29 04:41 · 中国 香港 腾讯云
银牌会员
★★★
积分 1,436 发帖 739 注册 2007-10-11 17:44 18年会员 UID 99469 性别 男
状态 离线
第 3 楼
发表于 2008-03-29 09:47 · 中国 陕西 西安 电信
社区乞丐
★
积分 -66 发帖 40 注册 2008-03-25 13:42 18年会员 UID 113959 性别 男
状态 离线
第 4 楼
大家还是要互相理解:
发表于 2008-03-29 09:57 · 中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105 发帖 1,276 注册 2008-03-08 13:00 18年会员 UID 112398 性别 男
状态 离线
我真的觉得在这里学到了好多东西,也遇到了很多热心的人,确实感谢大家了。同时我认为无论是讨论什么样的问题,哪怕是再简单不过的问题,大家都要抱着共同提高的态度,都要互相理解互相支持,更是要有一种和谐的氛围。而不要动之以怒,甚至于发例于楼上的贴子。
对了,我到现在还不明白楼上为什么要扣我两分,我说了这只是个人的一点总结而以,说错了就请指明,我定会虚心接受。
批处理之家新域名:www.bathome.net
第 5 楼
发表于 2008-03-29 12:03 · 中国 重庆 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
第 6 楼
发表于 2008-03-29 12:34 · 中国 浙江 嘉兴 电信
初级用户
★★
积分 157 发帖 67 注册 2007-05-13 11:03 19年会员 UID 88378 性别 男
状态 离线
楼 主 改进建议
1 写到最后一行 加个标识,一是醒目,二是防止读值错误
2 先读取值后马上删除这行,再写下n+=1 产生的新行,这样不至于BAT文件增大。
3 B.BAT 用 %0 替换,这样就写自己本身,BAT名称任意了。
我刚进这里,删除最下面一行不会,希望高手指教。
for /f "tokens=2" %%i in (%0) do (
set n=%%i
)
set /a n+=1
if %n% equ 10 goto :eof
echo goto %n% ^>nul 2^>nul >>%0
[ Last edited by tvzml on 2008-3-29 at 12:38 PM ]
第 7 楼
谢谢楼上的:
发表于 2008-03-29 12:56 · 中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105 发帖 1,276 注册 2008-03-08 13:00 18年会员 UID 112398 性别 男
状态 离线
谢谢你的建议,但我觉得有问题:
1 echo goto %n% ^>nul 2^>nul >>%0 将会生成一个内容为goto %n% >nul 2>nul 的临时文件%0;
2 删除最后一行就等于失去了记录历史次数的功能;
3 好像批处理不能删除自身任意一行吧?
批处理之家新域名:www.bathome.net
第 8 楼
发表于 2008-03-29 14:26 · 中国 浙江 嘉兴 电信
初级用户
★★
积分 157 发帖 67 注册 2007-05-13 11:03 19年会员 UID 88378 性别 男
状态 离线
要做个缓冲,跳转到临时BAT再操作,有点难度,不过还是好玩
第 9 楼
发表于 2008-03-29 14:58 · 中国 江苏 常州 电信
银牌会员
★★★
积分 2,404 发帖 946 注册 2005-09-08 13:44 20年会员 UID 42345
状态 离线
move 应该做到 只是楼主回复了 一定不要临时文件过度 我想在P运行中 还要改变其自身内容 请教下面的了
如果加行的话 那也可以用 FIND 处理
@echo off
type %0|find /v /c ""
pause
echo.>>%0
[ Last edited by terse on 2008-3-29 at 03:03 PM ]
简单!简单!再简单!
第 10 楼
发表于 2008-03-30 14:03 · 中国 甘肃 兰州 电信
金牌会员
★★★★
积分 4,103 发帖 1,744 注册 2006-01-20 13:00 20年会员 UID 49241 性别 男 来自 甘肃.临泽
状态 离线
第 11 楼
发表于 2008-03-30 14:26 · 中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105 发帖 1,276 注册 2008-03-08 13:00 18年会员 UID 112398 性别 男
状态 离线
Originally posted by vkill at 2008-3-30 14:03:
不管怎么都必须用数据库
我这个就不用数据库,一样能记录运行次数(用来进行使用次数限制),还不生成任何临时文件,请保存为彩票选号器.bat运行。
@echo off&color 5f&mode con cols=50 lines=8
title 彩票号码选取器
echo.&echo.&echo.
set /p password=请输入进入密码:
if "%password%"=="cn-dos.net" goto begin
for /f "tokens=2" %%i in (彩票选号器.bat) do (
set a=%%i
)
set /a a+=1
set /a b=5-a
if %a% geq 5 goto wrong
echo goto %a% ^>nul 2^>nul >>彩票选号器.bat
cls
echo.&echo.&echo.
echo 由于没正确输入密码,你仅能使用5次,现在还剩%b%次
ping /n 3 127.1 >nul
:begin
cls
set a=35
echo.&echo.&echo.
set /p a=请输入在多少个数中选择(默认回车为35):
cls
set b=7
echo.&echo.&echo.
set /p b=请输入选择多少个数(默认回车为7):
:loop
set /a n=%random%%%a+1
for %%i in (%str%) do if "%n%" == "%%i" goto loop
set str=%str% %n%
set /a m+=1
if %m% lss %b% goto loop
cls
echo.&echo.&echo.
echo 选择出的号码为: %str%
pause
cls
echo.&echo.&echo.
echo 选择完毕,请按任意键退出!
pause >nul&goto :eof
:wrong
cls
echo.&echo.&echo.
echo 对不起,你无权再使用本软件!
ping /n 3 127.1 >nul
goto 0 >nul 2>nul&goto :eof
[
Last edited by zw19750516 on 2008-3-30 at 02:32 PM ]
批处理之家新域名:www.bathome.net
第 12 楼
发表于 2008-03-30 14:55 · 中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687 发帖 1,467 注册 2005-08-08 12:00 20年会员 UID 44210
状态 离线
没必要使用goto并屏蔽输出提示
echo goto %a% ^>nul 2^>nul >>彩票选号器.bat
改为
echo :: %a% >>彩票选号器.bat
第 13 楼
发表于 2008-03-30 15:11 · 中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105 发帖 1,276 注册 2008-03-08 13:00 18年会员 UID 112398 性别 男
状态 离线
首先谢谢zh159,但如:
Originally posted by zh159 at 2008-3-30 14:55:
没必要使用goto并屏蔽输出提示
echo goto %a% ^>nul 2^>nul >>彩票选号器.bat
改为
echo :: %a% >>彩票选号器.bat
这样就要把最后的一行也改成0,第一次运行就会报错,所以我认为不妥。
批处理之家新域名:www.bathome.net
第 14 楼
发表于 2008-03-30 15:43 · 中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687 发帖 1,467 注册 2005-08-08 12:00 20年会员 UID 44210
状态 离线
因为你要用最后一行作为计数,所以原最后一行写法有误:
goto 0 >nul 2>nul&goto :eof
改为
goto :eof
:: 0
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正