编程修炼之bat脚本教程


批处理文件包含了大量的基本DOS命令,是一种可执行文件。该文件运行时能按照其规则将其中的命令逐一执行。使用批处理文件进行的批量的命令处理的过程,称之为批处理。

DOS常用命令

dir    列文件名
cd    改变当前目录
ren    改变文件名
copy   拷贝文件
del    删除文件
md    建立子目录
rd    删除目录
deltree  删除目录树
format  格式化磁盘
edit   文本编辑
type   显示文件内容
mem    查看内存状况
以下是新增加的命令
help   显示帮助提示
cls    清屏
move   移动文件,改目录名
more   分屏显示
xcopy   拷贝目录和文件

显示

echo 用法的解释。echo on 用于打开命令的回显;echo off 用于关闭命令的回显(默认情况下,ehco 是处于打开状态的)。只输入 echo 可以获得当前的回显状态(是否处于打开状态)。输入 echo 再加一段文字,例如 echo Hello world! 可以显示出 Hello world! 这句信息。

>echo hello
hello

@ ,如果在某一条命令最前面加上 @ ,那么这一行命令就不会显示出来。与 echo off 有着相似之处。 echo off 以后的所有命令本身都不再显示出来;而 @ 只是将当前那一行的命令不显示出来。然而,至于命令所产生的输出结果,仍然会显示出来。

> 表示将输出结果打印到某处。比如:echo Hello world!>d:\a.txt 表示将 Hello world! 这句话写入到 D:\a.txt 文件中。如果以前该文件中已经存在,并且有自己的内容,那么以前的内容就被覆盖掉了。比如我们再输入:echo yo, whats up>d:\a.txt ,那么文件 a.txt 中以前的 Hello world! 就变成了现在的新例句。

>> 与 > 类似,也可以将输出结果打印到某处。比如我们用 echo nothin much, and u?>>d:\a.txt 将例句写到 a.txt 里时,该例句并不会覆盖原有的 yo, whats up 这句话,而是加在了原句的后面。

如果一条命令后面跟上 >nul ,比如 pause>nul 表示将 pause 这条命令的输出显示到空设备里, nul 表示为空。用了 pause>nul 这条命令后,"按任意键继续…"的提示就不再出现了。

对比 echo off、@ 和 >nul 。echo off 表示这以后的所有命令的本身不再显示了,直到后面有 echo on 的出现。而加在命令行前面的 @ 只是让当前这一行命令不显示。加在命令行后面的 >nul 却可以让该命令的输出不显示。

title 后面跟字符串可以改变当前命令提示符的标题名称。输入 title 这是新标题 后,该命令提示符左上角的标题名称已经变为"这是新标题"了。输入中文可以通过 Ctrl+空格 切换出中文输入法;也可以通过复制粘贴的方式输入。

rem 的用法就很简单了,rem 后面跟上一段文字,在批处理中可以作为注释用。rem 和它后面跟的文字在实际运行时并不会起任何作用,只是为了方便人们阅读该批处理时更容易理解而已(如果您用过C的话,一定会联想到C语言里的 // 或 /* */ 的用法)。除了 rem 外,两个连续的冒号 :: 也起同样的作用。提示:rem 与 :: 的区别在于,rem 也是一种命令,在 echo on 的情况下会被显示出来,而 :: 却不会。

prompt ,这就是命令提示符中所谓的"提示符"了。在命令提示符中输入 prompt 加一段文字能够使得提示符不再是以传统的路径名和大于号组成的,而是以我们刚才输入的那段文字开头的。

赋值 调用 参数

set 跟上变量,再用等号 = 跟上字符串就能简单地给该变量赋值了。例如 set var=Hello world! 。为了确认一下变量 var 的值是否是 Hello world! ,可以用 set var 来查看变量 var 的值。用 set v 可以查看所有以字母 v 开头变量的值。直接输入 set 可以查看所有变量的值。另外,变量两侧加上百分符号 % 用来表示该变量的值(内容)。这样做可以将该变量的值赋给其他变量或是用做计算显示等处理。

>set a
APPDATA=C:\Users\wangtaihe\AppData\Roaming
ALLUSERSPROFILE=C:\ProgramData

  • set 后面加上 /a 的参数可以给变量赋予一个数值型的值,例如 set /a var=48 表示将数字48赋给变量var

  • set 后面加上 /p 的参数,可以将变量设成用户输入的一行输入。读取输入行之前,显示指定的 提示文字。

  • 把变量 var 里的值赋给另一个变量 var1 ,做法是:set var1=%var%
    替换功能,其格式为:原始变量的名称后面跟上冒号 :

  • echo %var:o=z% ,效果为把 Hello world! 里所有的字母 o 都用字母 z 代替,并显示出来,然而变量 var 的值却没有变化。

输入的命令    结果    效果                   
echo %var%    1234567890 显示所有                 
echo %var:~4%   567890   从第4个字符以后开始显示         
echo %var:~4,3%  567     从第4个字符以后开始显示,并只显示前3个  
echo %var:~-4%  7890    从倒数第4个字符开始显示         
echo %var:~-4,3% 789     从倒数第4个字符开始显示,并只显示前3个  
echo %var:~4,-2% 5678    从第4个字符以后开始显示,显示到还剩2个为止
echo %var:~0,3%  123     从头开始显示,并只显示前3个字符     
echo %var:~0,-3% 1234567   从头开始显示,显示到还剩3个字符为止   

对于bat文件后接的参数:
%0 代表bat文件名
%1 代表第一个参数
%2 代表第二个参数
%2 代表第二个参数
%~1 第一个参数,除去双引号
%~2 第二个参数,除去双引号
%* 代表所有参数

条件与循环

if

if "%TIME:~0,2%" lss "12" (
echo 现在是上午
) else (
echo 现在是下午
)

此外,if 还有其他的用法—— if exist 和 if defined 。if exist 可判断文件是否存在,就像这样:

if exist "D:\test my folder\a.txt" (
del "D:\test my folder\a.txt"
) else (
echo 您所要删除的文件不存在
)
@echo off
setlocal EnableDelayedExpansion
set /a num=1
for %%i in (D:\test\*.txt) do (
ren "%%i" !num!.txt
set /a num+=1
)

%%i ,上一节中提到过,在批处理文件中需要用连续的两个百分号 %% 来描述循环变量 i ,而不是一个。
使用了 setlocal EnableDelayedExpansion 后,可以让 for 或 if 后面的执行语句中变量的值随其变化而不断更新(所以后面使用了 !num! 而不是 %num%)。
for /l %i in (5,3,16) do echo %i ,可以让数值型的变量 i 依次成为:5、8、11、14 。

组合命令 管道命令

& 、&& 和 || 是一类用于两个或多个命令语句之间起衔接作用的符号。这对于我们想一次性执行两条或多条命令,以及前面命令执行结果的成功与否作为后面命令是否被执行的衡量标准,起着决定性的作用。

  • & 在多个命令之间所起的连接作用。
  • && 与 & 的不同之处,如果多命令中的某一条命令执行出错时,后面的所有命令将不会再被执行
  • || 的用途与 && 的功能恰好相反。当遇到执行正确的命令后将不再执行后面的命令
  • > 、>> 它们是输出重定向命令。其主要功能就是将一条命令或某个程序输出结果的重定向到特定文件中。> 与 >> 的区别在于,> 会清除调原有文件中的内容后写入指定文件,而 >> 只会追加内容到指定文件中,而不会改动其中的内容。
  • | 它可以将它左边命令的输出结果放到它右边的命令里作为输入参数。
netstat /a /n | find "7626" && echo 已被冰河感染 || echo 未被冰河感染

启动进程 start

命令格式:
START [“title”] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/AFFINITY ] [/WAIT] [/B] [command/program]
[parameters]
“title” 在窗口标题栏中显示的标题。
path 启动目录。
B 启动应用程序,但不创建新窗口。应用程序已忽略 ^C 处理。除非应用程序启用 ^C 处理,否则 ^Break 是唯一可以中断该应用程序的方式。
I 新的环境将是传递给 cmd.exe 的原始环境,而不是当前环境。
MIN 以最小化方式启动窗口。
MAX 以最大化方式启动窗口。
SEPARATE 在单独的内存空间中启动 16 位 Windows 程序。
SHARED 在共享内存空间中启动 16 位 Windows 程序。
LOW 在 IDLE 优先级类中启动应用程序。
NORMAL 在 NORMAL 优先级类中启动应用程序。
HIGH 在 HIGH 优先级类中启动应用程序。
REALTIME 在 REALTIME 优先级类中启动应用程序。
ABOVENORMAL 在 ABOVENORMAL 优先级类中启动应用程序。
BELOWNORMAL 在 BELOWNORMAL 优先级类中启动应用程序。
AFFINITY 新应用程序将具有指定的处理器关联掩码,用十六进制数字表示。
WAIT 启动应用程序并等待它终止。

参考链接:
http://docs.30c.org/dosbat/chapter02/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值