日期:2014-05-17  浏览次数:20853 次

Windows 命令行基础(下)
?
? ?

5. 批处理文件简介

  使用批处理文件(亦称批处理程序或脚本),可以简化日常或重复性任务。批处理文件是纯文本文件,它包含一条或多条命令,其文件扩展名为 .bat 或 .cmd 。在命令提示符下键入批处理文件的名称,Cmd.exe 就会按照该文件中各个命令出现的顺序来逐个运行它们。所以批处理文件的特点是:一次建立,多次运行,适合进行重复性任务。在 DOS 中只能使用 .bat 的批处理文件。

  可以在批处理文件中包含任何命令。某些命令,比如 for、goto 和 if 命令等,它们允许你对批处理文件中的命令作条件流程控制。例如,if 命令根据条件语句的结果来执行命令。还有些只能在批处理文件中执行的命令。

  有关批处理文件的详细信息,请参考以下命令的帮助页。

表5-1 命令 功能
rem 添加一段注释
echo 显示信息,或将命令回显打开或关上
if 执行批处理程序中的条件性处理
for 为一套文件中的每个文件运行一个指定的命令
goto 跳转到批处理程序中某个标明的行执行
pause 暂停批文件的处理并显示消息
call 从一个批处理程序调用另一个批处理程序,而不终止父批处理程序
pushd 保存当前目录,然后对其进行更改
popd 还原 pushd 保存的当前目录的上一个值
shift 更换批文件中可替换参数的位置
setlocal 开始批文件中环境更改的本地化
endlocal 结束批文件中环境更改的本地化
title 设置 cmd.exe 会话的窗口标题
start 启动另一个窗口来运行指定的程序或命令

6. 几个应用实例

6.1 批量改名

  今天的《xxxHoLic》漫画更新到了 158 话,我下载后,得到如下文件:(加粗为用户输入的内容)

C:\>d:(输入 D: 以切换到 D 盘,否则下一个 cd 命令无效)

D:\>cd D:\xxxHoLic\vol14\158

D:\xxxHoLic\vol14\158>dir /b
XXXholic158_001.jpg
XXXholic158_002-003.jpg
XXXholic158_004.JPG
XXXholic158_005.JPG
XXXholic158_006.jpg
XXXholic158_007.JPG
XXXholic158_008.jpg
XXXholic158_009.jpg
XXXholic158_010.JPG
XXXholic158_011.JPG
XXXholic158_012.jpg
XXXholic158_013.JPG
XXXholic158_014.JPG
XXXholic158_015.JPG
XXXholic158_016.jpg
XXXholic158_017.jpg
XXXholic158_018.JPG
XXXholic158_019.jpg
XXXholic158_020.JPG

  我想将它们改名为 01.jpg ~ 20.jpg 用命令该怎样做呢?这里只提供一种可能的办法,实际上还有很多种方法,大家可触类旁通。

D:\xxxHoLic\vol14\158>for %i in (01,04,05,06,07,08,09) do ren XXXholic158_0%i.jp
g %i.jpg(for 命令中,%i 变量遍历小括号中的内容)

D:\xxxHoLic\vol14\158>ren XXXholic158_001.jpg 01.jpg
……(命令回显会显示实际执行的命令,省略输出若干)
D:\xxxHoLic\vol14\158>ren XXXholic158_009.jpg 09.jpg

D:\xxxHoLic\vol14\158>for /L %i in (10,1,20) do ren XXXholic158_0%i.jpg %i.jpg

D:\xxxHoLic\vol14\158>ren XXXholic158_010.jpg 10.jpg
(省略输出若干)
D:\xxxHoLic\vol14\158>ren XXXholic158_020.jpg 20.jpg

D:\xxxHoLic\vol14\158>ren XXXholic158_002-003.jpg 02-03.jpg(最后手动改名)

D:\xxxHoLic\vol14\158>

  以上主要通过 for...in...do 结构及 /L 参数,使得本来要 19 次的改名操作只用两个 for 命令及一个 ren 就搞定。for 命令详细用法请参考其帮助页。

6.2 批量“粉碎”文件

  接着刚才的例子,如果我想用 4.2 节所述的方法“粉碎”当前文件夹下的所有 jpeg 文件,我该怎样做?

D:\xxxHoLic\vol14\158>for %i in (*.jpg) do copy nul %i /y

  这里使用 /y 来防止 copy 的覆盖前提示。

6.3 清理 Windows 临时文件夹 %tmp%

  “%tmp%”这个环境变量保存了 Windows 临时文件夹的位置,通常这个文件夹是 C:\Documents and Settings\用户名\Local Settings\Temp 。某些程序(典型如安装程序,解压缩软件)运行过程中产生的临时文件会存放于此,总之,是个堆放杂物的地方,其中文件一般可全部删除。在“我的电脑”的 “地址栏”(若找不到地址栏,“查看”->“工具栏”->“地址栏”)中输入“%tmp%”,然后回车,看看你的临时文件夹有多少东西。

  下面讨论清理。可能每隔一段时间就需要清理临时文件夹,因此我们采用批处理文件。以下为 CleanTmp.cmd 文件的内容。

第一种方案:全部删除

@echo off
rem 命令前加“@”会不让该命令显示出来,而“echo off”的作用是关闭整个
rem 脚本的命令回显。若不懂,请注释掉第一行(在最前面加“rem ”)再试。
rem CleanTmp.cmd : 清理 Windows 临时文件夹
rem Author : Henix<http://hi.baidu.com/shell32>
echo Cleaning...
rd /s /q %tmp%
md %tmp%
echo Done.
pause

也许你希望留下一些文件,比如 *.log ,那也可以用第二种方案:删除部分文件

rem CleanTmp.cmd : 清理 Windows 临时文件夹
rem Author : Henix<http://hi.baidu.com/shell32>
del %tmp%\*.tmp /q
del %tmp%\*.wmv /q
del %tmp%