| 
 
redtek 
金牌会员
 
      
 
  
  
积分 2902 
发帖 1147 
注册 2006-9-21 
状态 离线
 | 
『第 16 楼』:
 
 
使用 LLM 解释/回答一下
  
网友的代码参与和fffcw兄的主持,这个帖子既精彩又吸引人,欣赏~:) 
 
    
 
  
  |  
                  
  
                        Redtek,一个永远在网上流浪的人…… 
 
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |   
 | 
  2007-1-23 22:42 | 
  
 | 
 | 
 
zh159 
金牌会员
 
      
 
  
 
积分 3687 
发帖 1467 
注册 2005-8-8 
状态 离线
 | 
『第 17 楼』:
 
 
使用 LLM 解释/回答一下
  
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 楼』:
 
 
使用 LLM 解释/回答一下
  
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 
银牌会员
 
      天的白色影子
  
 
积分 2343 
发帖 636 
注册 2004-3-6 
状态 离线
 | 
『第 19 楼』:
 
 
使用 LLM 解释/回答一下
  
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 楼』:
 
 
使用 LLM 解释/回答一下
  
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 
银牌会员
 
      天的白色影子
  
 
积分 2343 
发帖 636 
注册 2004-3-6 
状态 离线
 | 
『第 21 楼』:
 
 
使用 LLM 解释/回答一下
  
希望各位能明白楼主的意思 
 
开机N次执行某一命令 
 
与日期和时间没有任何关系 
 
我完全可以一天之内开机N次完成条件 
 
也可以一年开机N-1次不完成条件 
 
所以凡是用到日期和时间的全部走了弯路 
 
关键是在于开机次数这个数据的存取地点与存取方式 
 
    
 
  
 |   
 | 
  2007-1-24 00:45 | 
  
 | 
 | 
 
zh159 
金牌会员
 
      
 
  
 
积分 3687 
发帖 1467 
注册 2005-8-8 
状态 离线
 | 
『第 22 楼』:
 
 
使用 LLM 解释/回答一下
  
这是我以前写的一段 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 
银牌会员
 
      天的白色影子
  
 
积分 2343 
发帖 636 
注册 2004-3-6 
状态 离线
 | 
『第 23 楼』:
 
 
使用 LLM 解释/回答一下
  
这是临时拼凑的一段代码 
简单测试,大约可以在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 
状态 离线
 | 
 | 
  2007-1-24 01:33 | 
  
 | 
 | 
 
xiaoqiangzx 
初级用户
 
  
 
  
 
积分 34 
发帖 12 
注册 2007-1-16 
状态 离线
 | 
『第 25 楼』:
 重啟七次運行某命令
 
使用 LLM 解释/回答一下
  
@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 KiB, 下载附件所需积分 1 点
,下载次数: 5)
 
 
  |  
                  
  
                    小强网志欢迎你  |   
 | 
  2007-1-24 04:27 | 
  
 | 
 | 
 
lotus516 
高级用户
 
     论坛上抢劫的
  
 
积分 551 
发帖 246 
注册 2006-9-21 
状态 离线
 | 
『第 26 楼』:
 
 
使用 LLM 解释/回答一下
  
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 楼』:
 
 
使用 LLM 解释/回答一下
  
多谢大家捧场,由于每次上来时间都比较晚了,还有些工作需要去做 
所以不能逐一致谢! 
 
综合看了一下今天的回复,其中: 
 
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 楼』:
 
 
使用 LLM 解释/回答一下
  
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 楼』:
 
 
使用 LLM 解释/回答一下
  
3) 
谢谢zh159,你在17楼的修改,和22楼的程序,我有时间再验证 
不会让你白写 
 
23楼qzwqzw的也一样,今天没有精力试了 
 
25楼提供的可执行程序非常8错,3Q3Q! 
 
    
 
  
 |   
 | 
  2007-1-24 12:12 | 
  
 | 
 | 
 
fffcw 
新手上路
 
 
 
  
  
积分 19 
发帖 9 
注册 2007-1-8 
状态 离线
 | 
『第 30 楼』:
 
 
使用 LLM 解释/回答一下
  
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 | 
  
 |