1、REM和::
2、ECHO和@
3、PAUSE
4、ERRORLEVEL
5、TITLE
6、COLOR
7、mode 配置系统设备
8、GOTO 和:
9、FIND
10、START
11、ASSOC和ftype
12、pushd和popd
13、CALL
14、shift
15、IF
16、setlocal与变量延迟
17、ATTRIB 显示或更改文件属性
1、echo. 输出空行,相当于输入一个回车
echo 文件内容>文件名
echo 追加文件内容>>文件名
2、mode
mode con cols=113 lines=15 & color 9f
此命令设置DOS窗口大小:15行,113列
3、call@echo off echo 产生一个临时文件>tmp.txt Rem 下行先保存当前目录,再将C:\windows设为当前目录 pushd c:\windows call :sub tmp.txt Rem 下行恢复前次的当前目录 Popd call :sub tmp.txt pause Del tmp.txt exit :sub echo 删除引号: %~1 echo 扩充到路径: %~f1 echo 扩充到一个驱动器号: %~d1 echo 扩充到一个路径: %~p1 echo 扩充到一个文件名: %~n1 echo 扩充到一个扩展名: %~x1 echo 扩充的路径指含有短名: %~s1 echo 扩充到文件属性: %~a1 echo 扩充到文件的日期/时间: %~t1 echo 扩充到文件的大小: %~z1 echo 扩充到驱动器号和路径: %~dp1 echo 扩充到文件名和扩展名: %~nx1 echo 扩充到类似DIR的输出行: %~ftza1 echo. goto :eof
4、setlocal与变量延迟
下面代码执行后结果为"4"
批处理运行命令的机制是按行读取的。先将一行整句读取并作预处理。@echo off set a=4 set a=5 & echo %a% pause
不用临时变量,交换两个变量
@echo off set var1=abc set var2=123 echo 交换前: var1=%var1% var2=%var2% set var1=%var2% & set var2=%var1% echo 交换后: var1=%var1% var2=%var2% pause
启动变量延迟
下面代码返回结果为"5"@echo off ::setlocal enabledelayedexpansion启动变量延迟, ::并且变量要用一对叹号"!!"括起来 setlocal enabledelayedexpansion set a=4 set a=5 & echo !a! pause
输出1,2,3,4,5
@echo off setlocal enabledelayedexpansion for /l %%i in (1,1,5) do ( set a=%%i echo !a! ) pause
1、%
引用变量用%var%,调用程序外部参数用%1至%9
%0 批处理文件本身,包括完整的路径和扩展名
%1 第一个参数
%9 第九个参数
%* 从第一个参数开始的所有参数
参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
例:最简单的复制文件自身的方法
copy %0 d:\wind.bat
2、| 命令管道符
格式:第一条命令 | 第二条命令 [| 第三条命令...]
第一条命令的结果作为第二条命令的参数使用,记得unix中这种方式很常见。
例:
dir c:\ |find "txt"
以上命令是:查找C:\所有,并发现txt字符串。
3、^ 转义字符
echo test ^>1.txt
结果是:输出"test >1.txt"
4、& 组合命令
语法:第一条命令 & 第二条命令 [& 第三条命令]
当第一条命令执行失败了,也不影响后面命令的执行,里面的命令是顺序执行的,从前往后执行。
例如:
dir z:\ & dir y:\ & dir c:\
以上命令会连续执行显示z,y,c盘的内容,不理会该盘是否存在。
5、&& 组合命令
语法:第一条命令 && 第二条命令 [&& 第三条命令]
同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有目录。
这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行。
例如:
dir z:\ && dir y:\ && dir c:\
6、|| 组合命令
语法:第一条命令 || 第二条命令 [|| 第三条命令]
用这种方法可以同时执行多条命令,当第一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令。
提示:组合命令和重定向命令一起使用必须注意优先级
管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令。
dir c:\ >a.txt && dir d:\ >>a.txt
:把C盘和D盘的文件和文件夹列出到a.txt文件中。
7、""字符串界定符
双引号允许在字符串中包含空格,进入一个特殊命令可以用如下方法@echo off cd "program files" cd progra~1 cd pro* pause
8、, 逗号
逗号相当于空格,在某些情况下","可以当做空格使用
例如:
dir,c:\
9、; 分号
当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行。
例如:dir c:\;d:\;e:\;z:\ 以上命令相当于 dir c:\ dir d:\ dir e:\ dir z:\
10、() 括号
括号中可以包含多行命令,这些命令将被看成一个整体,视为一条命令行。
例:@echo off echo 1 & echo 2 & echo 3 可以写成 ( echo 1 echo 2 echo 3 ) pause
11、! 感叹号
在变量延迟中,用来表示变量,即%var%应该表示为!var!
1、基本格式
for %%variable in (set) do command [command-parameters]
参数:for有4个参数 /d /l /r /f
例:@echo off ::打印C盘根目录下的全部目录名字 for /d %%i in (c:\*) do echo %%i pause ::把当前路径下文件夹的名字只有1-3个字母的打出来 for /d %%i in (???) do echo %%i pause
*号表示任意N个字符,?号表示任意一个字符
2、/r 递归@echo off ::列出C盘根目录和每个目录的子目录下面全部的exe文件 for /r c:\ %%i in (*.exe) do echo %%i pause ::列出当前路径目录和每个目录的子目录下面全部的exe文件 for /r %%i in (*.exe) do echo %%i pause
3、/l
表示以增量形式从开始到结束的一个数字序列
因此,(1,1,5)将产生序列1 2 3 4 5,(5,-1,1)将产生序列5 4 3 2 1
例:@echo off ::打印出1到5的数字 for /l %%i in (1,1,5) do @echo %%i pause ::打开5个CMD窗口 for /l %%i in (1,1,5) do start cmd pause
4、/f 迭代及文件解析
例:@echo off rem 首先建立临时文件test.txt echo ;注释行,这是临时文件,用完删除 >test.txt echo 11段 12段 13段 14段 15段 16段 >>test.txt echo 21段 22段 23段 24段 25段 26段 >>test.txt echo 31段 -32段 -33段 -34段 -35段 -36段 >>test.txt for /f "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do echo %%i %%j %%k pause del test.txt ::eol=; 分号开头的行为注释行 ::tokens=1,3* 将每行第1段,第3段和剩余字段分别赋予变量%%i,%%j,%%k :: delims=,- (减号后有一空格)以逗号减号和空格为分隔符,空格必须放在最后
输出命令的结果
@echo offf ::输出命令的结果 for /f "delims=" %%i in ('net user') do @echo %%i pause ::括号内的内容用单引号引起来,就表示那个当命令执行 ::加"delims="为了让空格的行能整行显示出来 ::在PATH变量里指定的路径里搜索notepad.exe文件 for /f "delims=" %%i in ("notepad.exe") do @echo %%~$PATH:i pause ::显示c:\windows\system32\notepad.exe
1、系统变量
2、自定义变量@echo off set var=我是值 echo %var% pause ::接收用户输入 set /p var=请输入变量的值 echo %var% pause
例如:
if exist filename ( del filename ) else ( echo filename missing ) 也可写成: if exist filename (del filename) else (echo filename missing)
1、示例1
@echo off call :sub return 你好 echo 子程序返回值:%return% pause :sub set %1=%2 goto :eof
2、示例2:求多个整数相加的子程序
@echo off set sum=0 call :sub 10 20 35 echo 数据求和结果:%sum% pause :sub rem 参数1为返回变量名称 set /a %1=%1+%2 shift /2 if not "%2"=="" goto sub goto :eof
可以将ftp命令组合保存为一个文本文件,然后用一下命令调用即可
ftp -n -s:filename
示例:
将下面内容保存为ftp.txt文件,可以使用ftp -n -s:ftp.txt
命令进行自动下载open 90.52.8.3 #打开ftp地址,默认端口号可以不写 user iware #用户为iware password8848 #密码 bin #二进制传输模式 prompt cd tmp1 #切换至iware用户下的tmp1目录 pwd lcd d:\download #本地目录 mget * #下载tmp1目录下的所有文件 bye #退出ftp
参考相关帮助文档
使用windows脚本宿主,可以再命令提示符下运行脚本。
C******.exe提供了用于设置脚本属性的命令行开关。
需要查相关资料,不懂...
Bat2Com工具
用法:Bat2Com fileName
dos环境下,可执行文件的优先级由高到低依次为.com>.exe>.bat>.cmd
执行一条命令后延迟一段时间再进行下条命令
示例1:利用ping命令延时@echo off echo 延时前:%time% ping /n 3 127.0.0.1 >null echo 延时后:%time% pause
解说:用到了ping命令的"/n"参数,表示要发送多少次请求到指定的ip。127.0.0.1可以简写为127.1。">null"就是屏蔽掉ping命令所显示的内容。
示例2:利用for命令延时
@echo off echo 延时前:%time% for /l %%i in (1,1,5000) do echo %%i>null echo 延时后:%time% pause
解说:利用一个计次循环并屏蔽它所显示的内容来达到延时的目的。
示例3:利用vbs延迟函数,精确度毫秒,误差1000毫秒内
@echo off echo %time% call :delay 5000 echo %time% pause exit :delay echo W******.Sleep %1>delay.vbs C****** //B delay.vbs del delay.vbs goto :eof
4、示例:模拟进度条
@echo off mode con cols=113 lines=15 & color 9f cls echo. echo 程序正在初始化... echo. echo --------------------------------- set /p= ■<null for /l %%i in (1 1 38) do set /p a=■<null & ping /n 1 127.0.0.1>null echo ----------------------------------- pause
解说:
set /p a=■<null
的意思是:只显示提示信息"■"且不换行,也不需手工输入任何信息,这样可以使"■"在同一行逐个输出。"ping /n 1 127.1>null"是输出每个"■"的时间间隔,即每隔多少时间输出一个"■"。
1、这几天在工作中用到了批处理,感觉批处理很方便也很强大,所以学习了下,做个记录。希望能帮助到一些要学习批处理的同学。如果大家有好的学习资源,记得要分享哦。
2、在dos中可以使用cmdName /?
查看帮助信息。