cmd dos windows shell
2013-10-28 20:47
316 查看
1 微软关于cmd命令文档:一定要先在网上搜到微软关于cmd中那些命令的详细说明文档,尽管没啥用,先壮壮信心。
2 批处理运行命令的机制
让我们先了解一下批处理运行命令的机制:
批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),
在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值
3 变量识别与变量替换
在cmd执行命令前会对脚本进行预处理,其中有一个过程是变量识别过程;
在这个过程中,如果有两个%括起来的如%value%类似这样的变量,就会对其进行识别,并且查找这个变量对应的值,再而将值替换掉这个变量,这个替换值的过程,就叫做变量扩展,然后再执行命令。
也就是说,一般情况下,在cmd执行命令之前,它会对%value%这样的变量进行替换。
4 变量的延迟扩展
如果说上面变量识别与变量替换类似c++中的编译预处理(替换宏之类的东东),(这个是事前的,静态的),那么这个延迟扩展就有点像是事后的,动态的扩展。
命令如下:
setlocal enabledelayedexpansion
设置本地为延迟扩展。其实也就是:延迟变量,全称"延迟环境变量扩展",
说明:
批处理文件中环境改动的本地化操作
A
在执行 SETLOCAL 之后,所做的环境改动只限于批处理文件。
要还原原先的设置,必须执行 ENDLOCAL。
B
达到批处理文件结尾时,对于该批处理文件的每个尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。
C
在延迟变量扩展中,要使用!来引用变量。
说明:
在延迟变量扩展中,像这样来引用这个变量 !k! ,否则可能会出现问题,没有为啥,记住就行。
pause:就是在命令执行完毕时,不让cmd窗口立即消失,而是暂停到那儿,方便我们看看执行结果。
@echo off
setlocalenabledelayedexpansion
set a=4
set a=5&echo !a!
pause
说明:
A 变量延迟的启动语句是“setlocalenabledelayedexpansion”,并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果
B set a=5&echo !a!”这句是给变量a赋值为5并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了)。
再看一段代码
在延迟变量扩展中,像这样来引用这个变量 !k! ,否则可能会出现问题,要重视这句话。
说明:
k有赋初值,则都替换yyy。
再来看代码
说明:
注:k没有赋初值,则替换为空。
2 批处理运行命令的机制
让我们先了解一下批处理运行命令的机制:
批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),
在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值
3 变量识别与变量替换
在cmd执行命令前会对脚本进行预处理,其中有一个过程是变量识别过程;
在这个过程中,如果有两个%括起来的如%value%类似这样的变量,就会对其进行识别,并且查找这个变量对应的值,再而将值替换掉这个变量,这个替换值的过程,就叫做变量扩展,然后再执行命令。
也就是说,一般情况下,在cmd执行命令之前,它会对%value%这样的变量进行替换。
4 变量的延迟扩展
如果说上面变量识别与变量替换类似c++中的编译预处理(替换宏之类的东东),(这个是事前的,静态的),那么这个延迟扩展就有点像是事后的,动态的扩展。
命令如下:
setlocal enabledelayedexpansion
设置本地为延迟扩展。其实也就是:延迟变量,全称"延迟环境变量扩展",
说明:
批处理文件中环境改动的本地化操作
A
在执行 SETLOCAL 之后,所做的环境改动只限于批处理文件。
要还原原先的设置,必须执行 ENDLOCAL。
B
达到批处理文件结尾时,对于该批处理文件的每个尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。
C
在延迟变量扩展中,要使用!来引用变量。
@echo off setlocal enabledelayedexpansion set k= 3 for /l %%i in (1,1,3) do ( set k=%%i echo !k! %%i ) pause nil
说明:
在延迟变量扩展中,像这样来引用这个变量 !k! ,否则可能会出现问题,没有为啥,记住就行。
pause:就是在命令执行完毕时,不让cmd窗口立即消失,而是暂停到那儿,方便我们看看执行结果。
@echo off
setlocalenabledelayedexpansion
set a=4
set a=5&echo !a!
pause
说明:
A 变量延迟的启动语句是“setlocalenabledelayedexpansion”,并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果
B set a=5&echo !a!”这句是给变量a赋值为5并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了)。
再看一段代码
@echo off setlocal enabledelayedexpansion set k= 3 for /l %%i in (1,1,3) do ( set k=%%i echo %k% %%i )
说明:
在延迟变量扩展中,像这样来引用这个变量 !k! ,否则可能会出现问题,要重视这句话。
@echo off set k=yyy for /l %%i in (1,1,3) do ( set k= %%i ::对k进行循环赋值 echo %k% %%i ) pause nil
说明:
k有赋初值,则都替换yyy。
再来看代码
@echo off for /l %%i in (1,1,3) do ( set k=%%i ::对k进行循环赋值 echo %k% %%i ) pause nil
<img alt="" src="" />
说明:
注:k没有赋初值,则替换为空。
相关文章推荐
- shell、cmd、dos和脚本语言
- [Shell编译]Windows Cmd显示中文乱码解决方案
- 02-dos2unix命令与windows编辑shell不可执行问题
- 关于windows下的dos和linux下的shell
- 解决windows的控制台和shell比较KUSO的问题(ConEmu&&Pycmd)
- windows下cmd时复制dos中的内容 错误信息等
- shell、cmd、DOS、python、php区别
- java Windows下cmd 命令和Linux下shell命令 执行非JDK中的jar包
- windows主机dos(cmd)命令检查网卡网络自动重启网卡
- shell、cmd、dos和脚本语言杂谈
- windows 下 cmd(dos) 编码方式
- shell、cmd、dos和脚本语言杂谈(转)
- shell,console,terminal / DOS、CMD的区别
- 3张图解决 Windows cmd dos 乱码问题
- 更改 windows 下 cmd(dos) 编码方式
- 如何在Windows下开发Python:在cmd下运行Python脚本+如何使用Python Shell(command line模式和GUI模式)+如何使用Python IDE
- 跳过权限检查,强制修改mysql密码 windows: 1,停止MYSQL服务,CMD打开DOS窗口,输入 net stop mysql 2,在CMD命令行窗口,进入MYSQL安装目录 比如E:
- 请问有没有办法更改 windows 下 cmd(dos) 编码方式 将其改为UTF-8
- Linux_shell_win7_dos_cmd_IP_查看帮助
- 在windows下使用cmd命令通过adb shell自动调用android模拟或真机的InstrumentRunner进行android 自动化测试