如何实现批处理(data.bat)来改变时间:

comeonstuding 2006-10-15 04:40:13
如何实现批处理(data.bat)来改变时间:
1:我把时间写在一个time.txt的文件里
格式:
2004-1-1
2005-1-1
2006-1-1
2:运行data.bat实现修改系统的时间,date ****-**-**
但要求每次修改的时间为time.txt中的时间读出,并按照次数为行数来读出时间,并修改为读出的时

间。(可以不写在time.txt文件里。只要每次运行data.bat的时候所修改的时间都不相同,而且跟前面

所运行的时间也不能相同,但时间可以任意变化,无需规律)
...全文
1033 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
helanshan 2006-10-16
  • 打赏
  • 举报
回复
用输入重定向符从文件读入:

echo on
date <1.txt
乔小布 2006-10-16
  • 打赏
  • 举报
回复
net time \\server /set/yes
comeonstuding 2006-10-16
  • 打赏
  • 举报
回复
我需要的是每次运行的时候改变时间,不是一次运行就全部改变了
comeonstuding 2006-10-16
  • 打赏
  • 举报
回复
具体点好吗
Kvci 2006-10-16
  • 打赏
  • 举报
回复
3. 可以用 /f 参数将某一命令执行结果作为循环范围

非常有用的功能。比如,我们想知道目前的环境变量有哪些名字(我们只要名字,不要值)。可是SET命令的输出是“名字=值”的格式,现在可以用FOR来只取得名字部分:
FOR /F "delims==" %i IN ('set') DO @echo %i
将看到:
ALLUSERSPROFILE APPDATA CLASSPATH CommonProgramFiles COMPUTERNAME ComSpec dircmd HOMEDRIVE ......

这里是将set命令执行的结果拿来作为循环范围。delims==表示用=作为分隔符,由于FOR /F默认是用每行第一个TOKEN,所以可以分离出变量名。如果是想仅列出值:


FOR /F "delims== tokens=2" %i IN ('set') DO @echo %i

tokens=2和前例相同,表示将第二列(由=作为分隔符)作为循环值。

再来个更有用的例子:

我们知道 date /t (/t表示不要询问用户输入)的输出是象这样的:


Sat 07/13/2002

现在我想分离出日期部分,也就是13:


for /f "tokens=3 delims=/ " %a in ('date /t') do @echo %a

实际上把 tokens后面换成1,2,3或4,你将分别得到Sat, 07, 13和2002。注意delims=/后面还有个空格,表示/和空格都是分隔符。由于这个空格delims必须是/f选项的最后一项。

再灵活一点,象本文开头提到的,将日期用2002-07-13的格式输出:


for /f "tokens=2,3,4 delims=/ " %a in ('date /t') do @echo %c-%a-%b

当tokens后跟多个值时,将分别映射到%a, %b, %c等。实际上跟你指定的变量有关,如果你指定的是 %i, 它们就会用%i, %j, %k等。

灵活应用这一点,几乎没有做不了的事。

4. 可以用 %~ 操作符将文件名分离成文件名、扩展名、盘符等独立部分

这个比较简单,就是说将循环变量的值自动分离成只要文件名,只要扩展名,或只要盘符等等。

例:要将 c:\mp3下所有mp3的歌名列出,如果用一般的 dir /b/s 或 for /r ,将会是这样:


g:\mp3\Archived\05-18-01-A\游鸿明-下沙\游鸿明-01 下沙.mp3 g:\mp3\Archived\05-18-01-A\游鸿明-下沙\游鸿明-02 21个人.mp3 ...... g:\mp3\Archived\05-18-01-A\王菲-寓言\王菲-阿修罗.mp3 g:\mp3\Archived\05-18-01-A\王菲-寓言\王菲-彼岸花.mp3 g:\mp3\Archived\05-18-01-A\王菲-寓言\王菲-不爱我的我不爱.mp3 ......

如果我只要歌名(不要路径和".mp3"):


游鸿明-01 下沙 游鸿明-02 21个人 ...... 王菲-阿修罗 王菲-彼岸花 王菲-不爱我的我不爱 ......

那么可以用FOR命令:


for /r g:\mp3 %a in (*.mp3) do @echo %~na

凡是 %~ 开头的操作符,都是文件名的分离操作。具体请看 for /? 帮助。

本文举的例子有些可能没有实际用处,或可用其它办法完成。仅用于体现FOR可以不借助其它工具,仅用DOS命令组合,就可完成相当灵活的任务。
Kvci 2006-10-16
  • 打赏
  • 举报
回复
2. 将某一文件内容或命令执行结果作为循环范围:

假如你有一个文件 todel.txt,里面是所有要删除的文件列表,现在你想将里面列出的每个文件都删掉。假设这个文件是每个文件名占一行,象这样:
c:\temp\a1.txt
c:\temp\a2.txt
c:\temp\subdir\b3.txt
c:\temp\subdir\b4.txt

那么可以用FOR来完成:


for /f %a in (todel.txt) do del %a

这个命令还可以更强大。比如你的 todel.txt 并不是象上面例子那么干净,而是由DIR直接生成,有一些没用的信息,比如这样:


Volume in drive D is DATA Volume Serial Number is C47C-9908 Directory of D:\tmp 09/26/2001 12:50 PM 18,426 alg0925.txt 12/02/2001 04:29 AM 795 bsample.txt 04/11/2002 04:18 AM 2,043 invitation.txt 4 File(s) 25,651 bytes 0 Dir(s) 4,060,700,672 bytes free

for 仍然可以解出其中的文件名并进行操作:


for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a DEL %a

当然,上面这个命令是在进行删除,如果你只是想看看哪些文件将被操作,把DEL换成echo:


for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a echo %a

你将看到:

alg0925.txt bsample.txt invitation.txt

skip=5表示跳过前5行(就是DIR输出的头部信息),tokens=5表示将每行的第5列作为循环值放入%a,正好是文件名。在这里我加了一个文件存在判断,是因为最后一行的"free"刚好也是第5列,目前还想不出好的办法来滤掉最后两行,所以检查一下可保万无一失。
Torch009 2006-10-16
  • 打赏
  • 举报
回复
不懂,学习。
superarhow 2006-10-16
  • 打赏
  • 举报
回复
批处理内容如下(假设用lz给的time.txt)
more time.txt +1 >time1.txt
type time.txt |date
del time.txt
ren time1.txt time.txt
jyf1987 2006-10-15
  • 打赏
  • 举报
回复
不如写个vbs文件来实现
jixingzhong 2006-10-15
  • 打赏
  • 举报
回复
读取文件变量,
然后写到一个新的文件中。

编译这个程序,
然后在 .bat 中调用这个 exe
comeonstuding 2006-10-15
  • 打赏
  • 举报
回复
我的思路:
1;把一个时间写在time.txt中
2:读出时间到变量%time%中
3:data %time%
4:%time%=%time%+1
5:把%time%写入到time.txt
comeonstuding 2006-10-15
  • 打赏
  • 举报
回复
不一定要从文件读出,也可以直接用批处理中时间自动修改时间来实现啊
comeonstuding 2006-10-15
  • 打赏
  • 举报
回复
up
飞哥 2006-10-15
  • 打赏
  • 举报
回复
我不会,期待高手
^_^
飞哥 2006-10-15
  • 打赏
  • 举报
回复
你就是要写批处理文件啊?

不然用什么写啊
comeonstuding 2006-10-15
  • 打赏
  • 举报
回复
不要批处理也可以,只要一次运行就改变时间,每次改变的时间不同就可以了。推荐软件也可以

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧