Windows批处理的高级用法

转载 2006年05月25日 15:52:00
嗯,标题好像很大,貌似会图文并茂的讲解很多用法似的……嘿嘿,其实没这么复杂,只是从一个例子出发,抛砖引玉,引出Windows批处理中并不为我们注意的高级用法。真的很有用哦!

有这么一个需求,要求做一个批处理文件,能够自动执行某个目录中的几个可执行文件,并且把它们的屏幕输出存入一个Log文件中。这里涉及到两个问题:
  1. 如何将屏幕输出转向到文件
  2. 如何确定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批处理的高级用法。

嗯,说完了(噢,好像什么都没说啊……)。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=754800

相关文章推荐

ZendFramework学习第三章(核心组件—会话处理之Zend_Session高级用法)

上一节是在会话处理方面的基本应用。这一节和大家一起学习Zend_Session的高级应用,内容包括坐定会话命名空间、会话过期、会话封装与控制以及防止一个会话命名空间的多重实例等。 对于如何开...
  • zqtsx
  • zqtsx
  • 2012-11-15 15:45
  • 620

input高级限制级用法.txt

JAVA正则表达式高级用法(分组与捕获)

JAVA正则表达式高级用法(分组与捕获) 标签: 正则表达式javac测试 2008-08-06 10:06 15764人阅读 评论(19) 收藏 举报 分类: Java(85)...

makefile详解 变量高级用法 追加变量值 override 十八

三、变量高级用法 这里介绍两种变量的高级使用方法,第一种是变量值的替换。 我们可以替换变量中的共有的部分,其格式是“$(var:a=b)”或是“${var:a=b}”,其意思是,把变量...

oracle高级用法.rar

  • 2008-04-14 14:29
  • 386KB
  • 下载

Android动画高级用法演示

  • 2016-02-18 17:24
  • 2.06MB
  • 下载

sqlite使用总结

sqlite是一个比较小巧的数据库,最大的好处就是无安装嵌入式,文档和资料也比较多(我早期做windows应用开发使用access作为数据库,资料太难查了),当然功能也远没有mysql等高级数据库强大...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)