中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 98下仅用批处实现“开机n次后执行某一命令“
« [1] [2] »
作者:
标题: 98下仅用批处实现“开机n次后执行某一命令“ 上一主题 | 下一主题
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 16 楼』:  

网友的代码参与和fffcw兄的主持,这个帖子既精彩又吸引人,欣赏~:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2007-1-23 22:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 17 楼』:  



  Quote:
Originally posted by fffcw at 2007-1-23 00:12:
恭喜4楼获得最佳创意奖,你的想法很good,但是
set Num=%Num%*
>Num.bat echo set Num=*
请说明一下意思,执行数次后Num.bat 文件里面只是" Num=*  "
没 ...

4 楼98的搞错一个地方
@echo off
if not exist c:\Num.bat >c:\Num.bat echo set Num=*
call Num.bat
if "%Num%" == "*******" goto run
>Num.bat echo set Num=%Num%*
goto end

:run
start ......

:end
exit
set Num=%Num%*
>Num.bat echo set Num=*

改为:

set Num=%Num%*
>Num.bat echo set Num=%Num%

XP下的:
@echo off
if not exist c:\Num.bat >c:\Num.bat echo set Num=1
call Num.bat
if "%Num%" == "7" goto run
set /a Num=%Num%+1
>Num.bat echo set Num=%Num%
goto end

:run
start ......

:end
exit
PS:直接用时间你根本无法判断启动次数

[ Last edited by zh159 on 2007-1-23 at 11:31 AM ]

2007-1-23 23:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lotus516
高级用户

论坛上抢劫的


积分 551
发帖 246
注册 2006-9-21
状态 离线
『第 18 楼』:  

setlocal enabledelayedexpansion是启用延迟的环境变量扩展,可能98不支持,你说的不建立文件,直接用时间写成判断语句是不是更简洁呢,我认为只凭时间是不能判断次数的,最后还是要加上次数的变量!!我的可能不是最好但我的只有一个文件,而且是每天会自动清零,也就是说你即使是天天用也不用改代码也不用去删除昨天产生的垃圾,而且我的只会产生一个文件!8楼的不错,扩展性很好,但会产生很多垃圾,并且你要天天用的话你还的手动去删除昨天产生的文件夹,并且最大的弱点正如你说的如果我要设定100次。。。。。。,这个就很让人....还有这种冗长代码的效率是很低的!!四楼应该是里面最好的,但要天天用也得手动删除昨天用过的!!还有次数多*就可观了,数起次数来,嘿嘿!
楼上的set Num=%Num%+1少个参数/a吧!!

[ Last edited by lotus516 on 2007-1-23 at 11:46 PM ]

2007-1-23 23:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 19 楼』:  

98/DOS命令行不支持命令扩展以及其它许多cmd特性

大家可以查阅一下cmd下的多少特性是用到命令扩展的

就知道98/DOS下的批处理编程与cmd下完全不是同一范畴

-------------------------------------------------------------------------------

想试试98/DOS批处理又没有98和DOS环境的朋友

可以用XP/2003的command来模拟

因为command下的批处理语法与98/DOS基本相近

用法:开始-运行-command-批处理名

2007-1-24 00:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 20 楼』:  

re:lotus516
98下set无/a /p参数,所以你2楼的98下的代码无效

楼主只说明了“开机n次后执行某一命令”,并未说明“每天”,所以没加上日期判断

另:你用日期文件名判断方式也有误:
set /a wj=%date:~0,4%%date:~5,2%%date:~8,2%-1
只要在1号这天,就会出错:20070101-1=20070100
不应该用日期名作为文件名判断,应该将日期写入固定的名称的文件内

2007-1-24 00:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 21 楼』:  

希望各位能明白楼主的意思

开机N次执行某一命令

与日期和时间没有任何关系

我完全可以一天之内开机N次完成条件

也可以一年开机N-1次不完成条件

所以凡是用到日期和时间的全部走了弯路

关键是在于开机次数这个数据的存取地点与存取方式

2007-1-24 00:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 22 楼』:  

这是我以前写的一段XP的可以利用自身计数的批处理,不产生另外多余的文件(当然,得手动清空计数),自己参考一下
::必须在批处理最后一行换行为空行!!!
@echo off
for /f "tokens=1,2* delims=:" %%i in ('findstr /nv "`" "%~nx0"') do set /a line=%%i-1
for /f "skip=%line% 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

[ Last edited by zh159 on 2007-1-23 at 11:52 AM ]

2007-1-24 00:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 23 楼』:  

这是临时拼凑的一段代码

简单测试,大约可以在DOS/CMD下运行

--------------------------------------------------------

因为使用%temp%\bootnum.txt存放文件

所以喜欢开机清除垃圾文件的朋友小心了

考虑过使用当前路径

不过对于放在光盘介质和在非批处理路径下调用的情况并不合适

所以放弃

-------------------------------------------------

因为运行时必须加参数

所以喜欢直接点击执行批处理的朋友该郁闷了


参数1,指定满足执行条件的程序运行次数(放在autoexec.bat中就是启动次数)

参数2,执行条件满足后所要执行的程序,如果带参数,用引号引起

参数3,/c清除以前的运行记录,仅在条件次数超出时使用
@echo off
if #%2==# goto end
if #%3==#/c for %%f in (%temp%.\bootnum.dat*) do del %%f
echo .>> %temp%.\bootnum.dat
find "" /v /c %temp%.\bootnum.dat | find ": %1">nul
if errorlevel 1 goto end
del %temp%.\bootnum.dat
call %2
:end


2007-1-24 01:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zch1366
中级用户





积分 326
发帖 148
注册 2005-12-16
状态 离线
『第 24 楼』:  

等待大家好消息

2007-1-24 01:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xiaoqiangzx
初级用户




积分 34
发帖 12
注册 2007-1-16
状态 离线
『第 25 楼』:  重啟七次運行某命令

@ECHO OFF

COUNT COUNT.TXT 7 (計算重啟開機的次數
reboot  (重啟電腦的命令)
IF ERRORLEVEL 1 GOTO NG
GOTO END

: NG
echo reset fail !!!

:END
IF EXIST COUNT.TXT DEL COUNT.TXT
md xxx   建立文件夾
rd xxx   去掉文件夾
 ps: count reboot 命令在論壇到處都有,給小弟在此提供下,望有用
望我們
    共同努力 ̄ ̄

[ Last edited by xiaoqiangzx on 2007-1-23 at 03:40 PM ]

附件 1: run.rar (2007-1-24 04:27, 9.13 K, 下载附件所需积分 1 点 ,下载次数: 5)


小强网志欢迎你
2007-1-24 04:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lotus516
高级用户

论坛上抢劫的


积分 551
发帖 246
注册 2006-9-21
状态 离线
『第 26 楼』:  



  Quote:
Originally posted by zh159 at 2007-1-24 00:25:
re:lotus516
98下set无/a /p参数,所以你2楼的98下的代码无效

楼主只说明了“开机n次后执行某一命令”,并未说明“每天”,所以没加上日期判断

另 ...

多谢zh159指点,没有考虑到每月第一天的情况!


原来command是可以模拟dos的,还以为只是cmd的英文版呢!

2007-1-24 09:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fffcw
新手上路





积分 19
发帖 9
注册 2007-1-8
状态 离线
『第 27 楼』:  

多谢大家捧场,由于每次上来时间都比较晚了,还有些工作需要去做
所以不能逐一致谢!

综合看了一下今天的回复,其中:

1) 4楼和17楼提到的增加文本中*号个数的办法以及代码都让我这个门都没入的眼前一亮,想到过追加字符,然后判断字符数量,但是只想到基本的>>符号

set Num=%Num%*
>Num.bat echo set Num=%Num%

这样的句子对菜鸟很有教育意义

至于18楼说的"手动删除昨天用过的!!还有次数多*就可观"
可以加入自动删除的命令
*号过多的问题就要改变一下程序结构了,应该是当*号达到一定数量时比如十个,就跳转执行另一十个*号(或别的符号更好)的循环,用两个循环既可以实现20次的计数而且*号不会过多;也可以实现10X10就是100的计数,我估计对你们来说不难做到,应该是循环嵌套;当然三个循环就可以累计1000次了,这样就可以满足多数需要

[ Last edited by fffcw on 2007-1-23 at 11:58 PM ]

2007-1-24 11:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fffcw
新手上路





积分 19
发帖 9
注册 2007-1-8
状态 离线
『第 28 楼』:  

2)
Lotus516的积极参与让帖子很活跃
你在18楼提到用时间直接判断的问题
的确时间或日期和开机次数建立起联系应该也不是简单的事情,但是适用于每天或每周只做固定开机次数的场合。比如一天只开2次,或每周只开5次等等,对于这种特定情况我想实现命题对你来说有可能比较简单(不知道98下能不能得到纯粹数字的时间字符,find应该可以做到),可以不作为讨论范围。

然而引申出我另一个问题,win98、win2000和winXP下,借用你在2楼的代码,键入"echo %date:~0,4%"得到的结果是否一样呢?win98下应该无效,win2000下,我上午试验了好像不是你的预期,需要改变其中两个数字,winXP下刚试没问题
请高手们再给点拨一下!

[ Last edited by fffcw on 2007-1-24 at 12:01 AM ]

2007-1-24 12:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fffcw
新手上路





积分 19
发帖 9
注册 2007-1-8
状态 离线
『第 29 楼』:  

3)
谢谢zh159,你在17楼的修改,和22楼的程序,我有时间再验证
不会让你白写

23楼qzwqzw的也一样,今天没有精力试了

25楼提供的可执行程序非常8错,3Q3Q!

2007-1-24 12:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fffcw
新手上路





积分 19
发帖 9
注册 2007-1-8
状态 离线
『第 30 楼』:  

4)我手上有一本《DOS6.22实用大全》作者Peter Norton
清华出版社出版,1996年8月第二版第三次印刷,标价70元RMB
当年这样的价格还是比较NB的
其中说到find命令的功能,能够实现在如执行dir命令后只显示指定字符以后的字符
书中举例"dir|find "free" "将会只显示磁盘剩余空间 
" chkdsk|find"disk space" "将察看当前盘总容量
简单的用法不难,稍微复杂一点的应用我就不会了
我设想另一个方案:
第一次开机运行建立空文件夹下一个0号文件
第二次开机使用
dir|find "这里换成有效的字符串"
得到该文件夹内文件数1,然后建立1号文件
类推达到10个后清空文件夹,另建一个判断用的中间文件比如10号文件
以后开机仍建立0号文件,达到10个后清空文件夹
判断10文件存在建立20号文件
这样临时文件最多为10多个
至于次数的设定就不难了,仅用判断文件的存在即可
仅作咨询,高手可以给几行关键代码,不用麻烦大家作出完整程序了
比起上面的追加*号来弯子绕多了
但与我已经完成的那个笑料程序相比,这个弯绕的不够远!


把复杂搞简单相当困难,但是把简单尽可能的搞复杂就更困难!
有了个好理由,我开始得意于我的那个还没公布的大制作
论坛真不好拾道,工作人员够辛苦
都回家觉觉吧

对了,临时文件应该是必不可少的,因为要关机保存计数
只是有多有少,越高的手临时文件会尽可能少
再少也有止境,要往多里整那可是无止境的啊!继续得意。。。


不知道压缩包怎么上传

[ Last edited by fffcw on 2007-1-25 at 11:40 PM ]

2007-1-24 12:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: