bat命令学习笔记

1.一般在开始声明

setlocal enabledelayedexpansion 设置本地为延迟扩展。其实也就是:延迟变量,全称延迟环境变量扩展,使得批处理能够感知到变量的动态变化,在运行过程中给变量赋值。

2. @echo off   表示在此语句后所有运行的命令都不显示命令行本身(默认是on), 如果不想显示本身可以用@echo off可以不让echo off显示.

3.参数传递

%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。
变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用 %1 到 %9 顺序表示。

     Sample:
      @echo off
call test2.bat "hello" "haha" (执行同目录下的“test2.bat”文件,并输入两个参数)
在“test2.bat”文件里写:
echo % (打印: "hello")
echo % (打印: "haha")
echo % (打印: test2.bat)
echo % (打印: "hello")

4.@命令   表示不显示@后面的命令

@ 与 echo off 相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。

5.注释     Rem 命令 语法:Rem Message...或者用::代替Rem

6.Pause命令

会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续

7.Call命令

语法: call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]

参数: [Drive:][Path] FileName 指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。
调用另一个批处理程序,并且不终止父批处理程序。
如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令。
call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。

8.start命令(没有实践。。)

调用外部程序,所有的 DOS命令 和 命令行程序 都可以由 start命令 来调用。

入侵常用参数:
MIN 开始时窗口最小化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数

9、if命令

1)if  语法: if [not] "参数" == "字符串" 待执行的命令

2)if exist  语法: if [not] exist [路径\]文件名 待执行的命令  如果有指定的文件,则条件成立,运行命令,否则运行下一句。

3) if errorlevel number

语法: if [not] errorlevel <数字> 待执行的命令
如果程序返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。(返回值必须按照从大到小的顺序排列)

3) 比较运算符:
EQU - 等于 (一般使用“==”)
NEQ - 不等于 (没有 “!=”,改用“ if not 1==1 ”的写法)
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于

10 for 命令

1) for {%variable | %%variable} in (set) do command [command-parameters]

%variable 指定一个单一字母可替换的参数。变量名称是区分大小写的,所以 %i 不同于 %I
在批处理文件中使用 FOR 命令时,指定变量建议用 %%variable而不要用 %variable。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。

2) 如果命令扩展名被启用,下列额外的 FOR 命令格式会受到支持:
a.FOR /D %variable IN (set) DO command [command-parameters]
如果集里面包含通配符,则指定与目录名匹配,而不与文件名匹配。
b.FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。
如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。
c.FOR /L %variable IN (start,step,end) DO command [command-parameters]
该集表示以增量形式从开始到结束的一个数字序列。
如:(1,1,5) 将产生序列 1 2 3 4 5; 而(5,-1,1) 将产生序列 (5 4 3 2 1)。
d.有或者没有 usebackq 选项:
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (command) DO command
参数"options"为:
eol=c - 指一个行注释字符的结尾(就一个,如“;”)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。
m-n格式为一个范围。通过 nth 符号指定 mth。
如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
usebackq - 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 filenameset中使用双引号扩起文件名称。

11 变量

%是批处理变量引导符,引用变量用%var%,调用程序外部参数用%1至%9等等

SET [variable=[string]]
SET /P variable=[promptString]  ::用户输入变量的值
SET /A expression

set /a var+=1 这样的语法对应原始语法就是set /a var = %var% + 1

[设置变量]
格式:set 变量名=变量值
详细:被设定的变量以%变量名%引用

[取消变量]
格式:set 变量名=
详细:取消后的变量若被引用%变量名%将为空

[展示变量]
格式:set 变量名
详细:展示以变量名开头的所有变量的值

[列出所有可用的变量]
格式:set

[计算器]
格式:set /a 表达式
示例:set /a 1+2*3
输出 7

!注意!
set不能用在复合语句里面比如if 1==1 set a=2或者for %%i in (a) do set a=2

对于这样的"逻辑或取余操作符",我们需要把他们用双引号引起来,否则报错

set /a var= 1 "&" 1 这样结果就显示出来了,其他逻辑或取余操作符用法 
set /a var= 1 "^" 1 异运算 
set /a var= 1 "%" 1 取模运算 
set /a var= 2 "<<" 2 位左移 
set /a var= 4 ">>" 2 位右移

set /p的特殊应用(set /p=<nul相当于输出字符并不带回车,利用这个性质,可以做出比较漂亮的动画),用法示例:

@echo off
for /l %%i in ( ) do (
set /p=C<nul
::利用for循环运行某一命令来达到延时的目的。
for /l %%a in ( ) do ver>nul )
pause>nul

>是重定向符号
nul是空设备的意思
把提示输入到空设备就不显示了

1>nul 意思是不显示命令运行的正确提示
2>nul 是不显示错误提示

bat处理时间延迟:

参考:http://www.cnblogs.com/dongzhiquan/archive/2010/09/12/1994553.html

个人觉得还是ping 命令最简单实用。

上一篇:nginx+nodejs+mysql+memcached服务器后台架设centos6.5


下一篇:CentOS6.5系统挂载NTFS分区的移动硬盘 centos安装repoforge源(yum)