以程序设计语言角度看windows批处理
来源:互联网 发布:单片机串口是什么 编辑:程序博客网 时间:2024/06/05 19:00
一、变量
在批处理中,变量全部是弱类型的,通常可以当做字符串处理
1.初始化定义 set var=this a var
2.获取变量值 %var%
3.链接 set varcat=%var1%%var2%
4.截取 %var:~n,m% n是起点,m是长度,没有m表示直到结尾,n和m可以是负数,表示从尾部计数
5.替换 %var:source=desitination%
6.扩展 只是针对文件全路径的字符串,
%~I - 删除任何引号("),扩展 %I%~fI - 将 %I 扩展到一个完全合格的路径名%~dI - 仅将 %I 扩展到一个驱动器号%~pI - 仅将 %I 扩展到一个路径%~nI - 仅将 %I 扩展到一个文件名%~xI - 仅将 %I 扩展到一个文件扩展名%~sI - 扩展的路径只含有短名%~aI - 将 %I 扩展到文件的文件属性%~tI - 将 %I 扩展到文件的日期/时间%~zI - 将 %I 扩展到文件的大小%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串
7.变量延迟扩展setlocal enabledelayedexpansion,变量使用“!”标识
这个厉害,这里是目前唯一的,按照整型变量处理的语句。
8.set /a expression 是算术运算
9.转义符 ^,去除特殊符号的特殊地位
二、输入输出
1.标准输出 echo %var%
2.标准输入 set /p var=[promptstring]
3.输入文件 < log
4.追加文件 >>log
5.输出文件 > log
6.管道 | echo y|del /p a.txt
三、逻辑命令符
逻辑命令符包括:&;、&&;、||
& 它的作用是用来连接n个DOS命令,并把这些命令按顺序执行,而不管是否有命令执行失败;
&& 当&&;前面的命令成功执行时,执行&&;后面的命令,否则不执行;
|| 当||前面的命令失败时,执行||后面的命令,否则不执行。
四、控制语句
1.分支:
IF [NOT] ERRORLEVEL number commandIF [NOT] string1==string2 commandIF [NOT] EXIST filename command
命令扩展:
IF [/I] string1 compare-op string2 command
IF CMDEXTVERSION number commandIF DEFINED variable command
其中, compare-op 可以是:
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
2.循环:
FOR %variable IN (set) DO command [command-parameters]
在批处理中 %variable 写作 %%variable
命令扩展
/d:表示只处理目录 FOR /D %variable IN (set) DO command [command-parameters]
/r:表示处理根目录下的全部文件 FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
/l:表示对数字序列进行处理 FOR /L %variable IN (start,step,end) DO command [command-parameters]
/f:表示set是文本文件,并处理该文本文件
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
options:
eol=c - 指一个行注释字符的结尾(就一个)skip=n - 指在文件开始时忽略的行数。delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。usebackq - 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 file-set中使用双引号扩起文件名称。
example:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
五、函数
@echo off
::调用函数
call :add 1 2
echo %errorlevel%
pause
::函数前部一定加上goto :eof,避免多次运行函数
goto :eof
::函数名称add
:add
set /a re=%1+%2
echo %1+%2=%re%
exit /b %re%
六、注释
以::开始的一行,被注释
下面是高人写的,很灵动的思维。摘自http://blog.sina.com.cn/s/blog_51a4af870100cyhk.html
有些时候,我们需要在批处理中使用大段的注释,即连续的注释超过2行。那么,如何实现他呢?
方法有很多种,本文仅列举其中的一部分。
㈠、使用rem
注意:注释中不能使用重定向符和管道符;
当回显处于打开是时,rem 命令及注释内容将被显示;
rem 和注释之间要有空格。
示例:
rem 注释内容1
rem 注释内容2
rem 注释内容3
㈡、使用::
Windows XP 可以识别以冒号 (:) 开头作为标签的批处理程序行并且不会将它作为命令处理。如果某行以冒号开始,则该行的任何命令都将被忽略。
示例:
:: 注释内容1
:: 注释内容2
:: 注释内容3
㈢、使用echo >nul
注意:注释中不能使用重定向符和管道符;
echo 和注释之间要有空格。
示例:
echo 注释内容1>nul
echo 注释内容2>nul
echo 注释内容3>nul
㈣、使用goto
注意:注释中不能使用goto 指向的标签
示例:
goto han
注释内容1
注释内容2
注释内容3
:han
㈤、使用:注释
注意:注释中第一个字符不能是数字或字母;
示例:
:注释内容1
:注释内容2
:注释内容3
说明:在实际使用中,例如标签 :stsrt ,我们也可以认为他是注释。如下例:
:: ArgParse.bat - Parser of command line arguments
:: Will Sort - 2005-11-26 - WinXP_CMD/MSDOS7.10/MSDOS6.22
@echo off
:Init
for %%e in (directory_i directory_o filter_f filter_v log) do set %%e=
:ParseLoop
if "%1"=="" goto Start
for %%s in (i I f F v V l L o O) do if "%1"=="/%%s" goto Switch%%s
echo Error: Invalid switch '%1'!
goto Quit
:SwitchI
if "%directory_i%"=="" set directory_i=%2
goto NextArg
:SwitchO
if "%directory_o%"=="" set directory_o=%2
goto NextArg
:SwitchF
if "%filter_f%"=="" set filter_f=%2
goto NextArg
:SwitchV
if "%filter_v%"=="" set filter_v=%2
goto NextArg
:SwitchL
if "%log%"=="" set log=%2
goto NextArg
:NextArg
shift
shift
goto ParseLoop
:Start
echo.directory_i %directory_i%
echo.directory_o %directory_o%
echo.filter_f %filter_f%
echo.filter_v %filter_v%
echo.log %log%
:Quit
for %%e in (directory_i directory_o filter_f filter_v log) do set %%e=
:: Will Sort - 2005-11-26 - WinXP_CMD/MSDOS7.10/MSDOS6.22
@echo off
:Init
for %%e in (directory_i directory_o filter_f filter_v log) do set %%e=
:ParseLoop
if "%1"=="" goto Start
for %%s in (i I f F v V l L o O) do if "%1"=="/%%s" goto Switch%%s
echo Error: Invalid switch '%1'!
goto Quit
:SwitchI
if "%directory_i%"=="" set directory_i=%2
goto NextArg
:SwitchO
if "%directory_o%"=="" set directory_o=%2
goto NextArg
:SwitchF
if "%filter_f%"=="" set filter_f=%2
goto NextArg
:SwitchV
if "%filter_v%"=="" set filter_v=%2
goto NextArg
:SwitchL
if "%log%"=="" set log=%2
goto NextArg
:NextArg
shift
shift
goto ParseLoop
:Start
echo.directory_i
echo.directory_o
echo.filter_f
echo.filter_v
echo.log
:Quit
for %%e in (directory_i directory_o filter_f filter_v log) do set %%e=
:end
㈥、使用:标签 注释
:han
命令1
命令2
㈦、使用if not exist nul 注释
注意:注释中不能使用重定向符和管道符;
if not exist nul 和注释之间要有空格。
if not exist nul 注释内容1
if not exist nul 注释内容2
if not exist nul 注释内容3
0 0
- 以程序设计语言角度看windows批处理
- 以销售角度看Android学习
- 以开发者角度看其游戏体验心态
- 以面试官的角度看strcpy函数
- 我以玩游戏的角度去看学习
- mybatis入门--以新人的角度看问题
- 从程序的角度看linux与windows
- 从程序员的角度看Linux和windows的对比
- 从Windows消息的角度看窗口应用程序运行过程
- 从Windows的角度看Mac OS X软件开发
- 以c++的角度看OC中类成员和继承属性
- 业务角度看AMD
- 从地址角度看
- 终端角度看RSA
- 多角度看Binder
- 角度看的
- windows批处理
- windows批处理
- 关于运行类的classpath
- Android核心基础-6.演示案例-6.4.短信发送
- NSArray
- 一入python深似海--Views in Python3.1
- "这事与我无关"
- 以程序设计语言角度看windows批处理
- 进程管道通信
- Android实现图片滚动控件,含页签功能,让你的应用像淘宝一样炫起来
- fdhjdjdgjdgjryfmdcgjm
- oracle断电后报 ora-01033错误处理
- 邮件与即时通讯
- Oracle 表三种连接方式(sql优化)
- 通过eclipse对apk进入签名
- 第一个项目(一)