Windows批处理的高级用法
来源:互联网 发布:大连机车怎么样 知乎 编辑:程序博客网 时间:2024/05/30 02:24
有这么一个需求,要求做一个批处理文件,能够自动执行某个目录中的几个可执行文件,并且把它们的屏幕输出存入一个Log文件中。这里涉及到两个问题:
如何将屏幕输出转向到文件
如何确定Log的文件名
这两个问题都比较简单。第一个问题,通过“>”和“>>”可以轻松搞定,第二个问题似乎也不难,因为Windows支持环境变量,其中有一个“%DATE%”代表当前的日期,还有个“%TIME%”代表当时的时间,精确到百分之一秒。似乎这已经足够了吧,于是写出下面的脚本:
@echo off
SET LogFile=%DATE%%TIME%.log
app1.exe param1 param2 > %LogFile%
app2.exe param1 param2 >> %LogFile%
app3.exe param1 param2 >> %LogFile%
但是,很可惜,它无法按预期结果运行,它只会生成一个没有扩展名的文件,形如“2006-05-25”。想了想,哦,明白了,因为%DATE%打出来的东西是“2006-05-25 星期四”,遇到空格之后重定向的机制就开始起作用了,它以为这就是文件名全称了。
好了,那么我来加上引号,这下应该无敌了吧。
@echo off
SET LogFile="%DATE%%TIME%.log"
app1.exe param1 param2 > %LogFile%
app2.exe param1 param2 >> %LogFile%
app3.exe param1 param2 >> %LogFile%
但是,还是很可惜,Windows会报告“参数错误”。这又是怎么了呢?嗯,原来,Windows不允许文件名或目录名中含有“:”,而%TIME%的输出结果中恰好有两个“:”。这就无语了。
正在绝望之时,突然在命令行里鬼使神差的敲了一个“help set”,一切问题都明白了!以前都没有意识到啊,Windows批处理竟有如此强大的威力(当然,这还是没法和*nix比,不过已经比原来认识到的强多了)。
现在知道了,这个脚本可以这样写:
@echo off
SET LogFile=%DATE%%TIME%
REM 把 : 都替换成 -
SET LogFile=%LogFile::=-%
REM 把空格都替换成 -
SET LogFile=%LogFile =-%
REM 把 . 都替换成 -
SET LogFile=%LogFile.=-%
SET LogFile=%LogFile%.log
app1.exe param1 param2 > %LogFile%
app2.exe param1 param2 >> %LogFile%
app3.exe param1 param2 >> %LogFile%
至于具体的原理,大家可以在命令行里面敲help set就可以清楚看到了,Windows的文档做的就是好啊。
此外,还有help if和help call也很值得看,这些东西组合起来就构成了Windows批处理的高级用法。
如何将屏幕输出转向到文件
如何确定Log的文件名
这两个问题都比较简单。第一个问题,通过“>”和“>>”可以轻松搞定,第二个问题似乎也不难,因为Windows支持环境变量,其中有一个“%DATE%”代表当前的日期,还有个“%TIME%”代表当时的时间,精确到百分之一秒。似乎这已经足够了吧,于是写出下面的脚本:
@echo off
SET LogFile=%DATE%%TIME%.log
app1.exe param1 param2 > %LogFile%
app2.exe param1 param2 >> %LogFile%
app3.exe param1 param2 >> %LogFile%
但是,很可惜,它无法按预期结果运行,它只会生成一个没有扩展名的文件,形如“2006-05-25”。想了想,哦,明白了,因为%DATE%打出来的东西是“2006-05-25 星期四”,遇到空格之后重定向的机制就开始起作用了,它以为这就是文件名全称了。
好了,那么我来加上引号,这下应该无敌了吧。
@echo off
SET LogFile="%DATE%%TIME%.log"
app1.exe param1 param2 > %LogFile%
app2.exe param1 param2 >> %LogFile%
app3.exe param1 param2 >> %LogFile%
但是,还是很可惜,Windows会报告“参数错误”。这又是怎么了呢?嗯,原来,Windows不允许文件名或目录名中含有“:”,而%TIME%的输出结果中恰好有两个“:”。这就无语了。
正在绝望之时,突然在命令行里鬼使神差的敲了一个“help set”,一切问题都明白了!以前都没有意识到啊,Windows批处理竟有如此强大的威力(当然,这还是没法和*nix比,不过已经比原来认识到的强多了)。
现在知道了,这个脚本可以这样写:
@echo off
SET LogFile=%DATE%%TIME%
REM 把 : 都替换成 -
SET LogFile=%LogFile::=-%
REM 把空格都替换成 -
SET LogFile=%LogFile =-%
REM 把 . 都替换成 -
SET LogFile=%LogFile.=-%
SET LogFile=%LogFile%.log
app1.exe param1 param2 > %LogFile%
app2.exe param1 param2 >> %LogFile%
app3.exe param1 param2 >> %LogFile%
至于具体的原理,大家可以在命令行里面敲help set就可以清楚看到了,Windows的文档做的就是好啊。
此外,还有help if和help call也很值得看,这些东西组合起来就构成了Windows批处理的高级用法。
- Windows批处理的高级用法
- Windows批处理的高级用法
- Windows批处理的高级用法
- 批处理命令高级用法
- 批处理的高级运用
- 批处理的高级运用
- 批处理的高级运用
- 批处理的高级运用
- 批处理的高级运用
- 批处理的高级运用
- Windows批处理形如%~dp0的东西的用法
- Windows批处理命令与用法
- windows批处理for循环用法
- windows批处理中的变量与命令set的用法
- windows批处理中的变量与命令set的用法
- [分享]Windows批处理高级教程精选合编
- windows 控制台高级用法
- 批处理 for 的用法
- ASP 程序实现自动升级功能
- 一个美国老工程师的心理话: 给年轻工程师的十大忠告
- 教学管理系统-架构设计
- 倪光南院士 你该检讨一下了
- 突然想起的一个简单而好玩的关于js和vbs的反射问题
- Windows批处理的高级用法
- [原创]Pro Hibernate 3笔记和小结(1)之第一章Hibernate入门
- [原创]Pro Hibernate 3笔记和小结(2)之第一章Hibernate入门
- 产品经理的第一堂课(六):大宝(sodme)给我们提建议
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
- [原创]Pro Hibernate 3笔记和小结(3)之第一章Hibernate入门
- 教学管理系统-Editor实现
- 应用程序内存调整(4GT)技术相关知识
- 在上海软星工作的前两个星期