Windows批处理的高级用法

嗯,标题好像很大,貌似会图文并茂的讲解很多用法似的……嘿嘿,其实没这么复杂,只是从一个例子出发,抛砖引玉,引出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批处理的高级用法。

嗯,说完了(噢,好像什么都没说啊……)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、操作环境 制作64位合集,现有使用系统应是WIN8.1 X64(不需要安装ADK)。如果是WIN8 X64或WIN7 X64也可以,但必须安装ADK中的部署工具,批处理文件(.cmd)放在ADK安装目录中的DISM文件夹中,如:C:\Program Files (x86)\Windows Kits\8.1\Assessment and Deployment Kit\Deployment Tools\amd64\DISM,这个目录下执行。 选择一个有30G以上空闲空间的分区作为工作分区,如,E分区,NTFS格式。 二、准备工作 以下路径不能错,否则批处理将失败。 1、下载附件,提取$OEM$-X64文件夹(32位与64位的有区别)到工作分区根目录。 2、在工作分区根目录新建一个叫做My-win8.1-X64的文件夹,将从MSDN下载的64位专业版(注:不要使用VL版的)ISO文件中的全部内容提取到My-win8.1-X64目录内。 这两个是专业版VL版的,本批处理不支持。 cn_windows_8_1_pro_vl_x64_dvd_2971907.iso cn_windows_8_1_pro_vl_x86_dvd_2972620.iso 需要采用下面这两个专业版的ISO文件: cn_windows_8_1_x64_dvd_2707237.iso ------------用于制作64位的合集 cn_windows_8_1_x86_dvd_2707405.iso ------------用于制作32位的合集 3、将My-win8.1-X64\sources中的install.wim移动到工作分区根目录,并改名为PRO-X64.WIM。 4、将从MSDN下载的64位企业版ISO文件中的SOURCES目录内的install.wim提取工作分区根目录,并改名为ENT-X64.WIM。 工作分区根目录下必须有以下两个文件夹和两个WIM文件: $OEM$-X64 ---文件夹 My-win8.1-X64 ---文件夹 PRO-X64.WIM ---WIM文件 ENT-X64.WIM ---WIM文件 三、执行批处理 以管理员身份执行制作批处理,一站式打包制作生成Win8.1_X64_Nin1_kms.iso。 批处理执行前,最好是关闭所有浏览器窗口和其他运行软件。批处理执行期间,请不要打开工作分区中一些临时产生的目录与相应的文件,或运行运行软件。 当然,如果是以内置管理员身份运行批处理那就更好了。在已经安装的系统中,如何开启用内置管理员(Administrator)? WIN+X键----计算机管理----系统工具----本地用户和组---用户----双击Administrator----将“帐户已禁用”的勾去掉,注销当前用户,就可以登录内置管理员帐户了。 四、其他说明 1:制作后工作分区TEMPWIM内是临时WIM文件,自己决定要不要删除。 2:不做32位与64位的合集,因为这样将导致原生支持64位UEFI启动的功能丧失,分开制作更好。 3:内置管理员版本可以实现一站式无人值守安装,中间无需人工干预,该用户管理权限也大,不过在应用上有限制。所以,使用此版本,安装后进入桌面,可以再建立一个普通管理员帐户,双用户使用比较理想。 方法:WIN+X键----计算机管理----系统工具----本地用户和组---用户--(右键,新用户)---双击新用户名--隶属于--添加--高级--立即查找---选中Administrators(组)--确定---注销当前用户就可以使用新用户名登录了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值