for 语句
在cmd窗口中:
for %I in (command1) do command2
在批处理文件中:for %%I in (command1) do command2
for语句的基本要素:
- for、in和do是for语句的关键字;
- %%I是for语句中对形式变量的引用;
- in之后,do之前的括号不能省略;
- command1表示字符串或变量,command2表示字符串、变量或命令语句;
@echo off for %%i in(1, B, 3) do ehco %%i pause
if 语句
计算机只在乎0和1是吧?所以我们需要一种方法,来处理当条件是0的时候干什么,条件为1的时候又干什么。
好消息是 DOS 对条件语句支持的非常好。
检查文件或文件夹是否存在
IF EXIST "temp.txt" ECHO found
取反:
IF NOT EXIST "temp.txt" ECHO not found
If 和 Else 语句:
IF EXIST "temp.txt" ( ECHO found ) ELSE ( ECHO not found )
NOTE: 在判断的表达式两边加上双引号,这样可以避免一些bug,比如变量不存在,导致语法错误。
检查变量是否初始化
IF "%var%"=="" (SET var=default value)
或者
IF NOT DEFINED var (SET var=default value)
检查变量是否与字符串匹配
SET var=Hello, World! IF "%var%"=="Hello, World!" ( ECHO found )
或者不区分大小写来比较:
SET var=Hello, World! IF /I "%var%"=="hello, world!" ( ECHO found )
算数运算符比较
SET /A var=1 IF /I "%var%" EQU "1" ECHO equality with 1 IF /I "%var%" NEQ "0" ECHO inequality with 0 IF /I "%var%" GEQ "1" ECHO greater than or equal to 1 IF /I "%var%" LEQ "1" ECHO less than or equal to 1
检查返回值
IF /I "%ERRORLEVEL%" NEQ "0" ( ECHO execution failed )
应用
@echo off
是不显示本命令行及后面的所有命令行本身;echo是输出命令;set aa=xia3
,是给变量aa赋值为xia3,%aa%是使用此变量;@echo off set aa=xia3 echo %aa% echo bb pause
if 语句来判断是否已经赋值;
if defined str (echo %str%) else (echo 变量str的值为空)
;
注意:括号为英文状态下的(),否则执行不成功;@echo off set aa=xia3 if defined aa (echo %aa%) else (echo NULL) pause
rem语句
REM语句是注释此行,相当于此行不执行;
@echo off REM set aa=xia3 if defined aa (echo %aa%) else (echo NULL) pause
goto 语句
goto label跳转到要执行的标签,标签由冒号与标签名组成;
多个标签之间要加上exit终止程序继续向下运行;
同名的标签,程序执行最上面的一个;
标签名必须是常量,不能是变量;@echo off set /p input=请输入字母A或B if "%input%"=="A" goto A rem 如果input值是A,会跳转到A的标签去运行,运行时将跳过gotoA与:A间的内容 if "%input%"==B”goto B if not “%input%"=="A”(if not %input%=="B" goto C) rem 如果输入的值不是A就进行下个判断,下一个判断,如果输入不是B就跳转到C语句; :A echo您输入的是A pause exit :B echo 是B pause exit :C echo不是A或者B pause exit
脚本应用
文件遍历,输出文件名;
用for循环遍历文件,用echo打印出文件名;
for /R %%s in (.,*) do (echo %%s)@echo off set path=D:\sc rem set给path赋值 D: rem 进入D盘目录,否则在当前test.bat目录下执行遍历; cd %path% rem 切换到相应路径下; for /R %%i in(.,*) do(echo %%i) rem 用for循环遍历文件 pause
dos中 【dir /?】,查看dir命令下的参数;dir /s显示指定目录和所有子目录的文件;【D:】切换目录到D盘下;
start用法;
start命令可以用来启动电脑上的软件;
@echo off REM 就是启动IE浏览器,跳转到百度页面,并自动搜索‘苹果’; start http://www.baidu.com/s?wd=苹果
自己设定搜索内容;
@echo off set /p key=你写啥就搜啥 start http:/wwwbaiducom/s?wd=%key% pause
bat脚本搜索后,延迟10s,使用taskkill关掉我们打开的网站;
@echo off set /p key=你写啥就搜啥 start http:/wwwbaiducom/s?wd=%key% ping -n 10 127.0.0.1 > nul rem 让脚本延迟10秒,不然后面的关掉任务可能会执行失败 taskkill /fi "windowTitle eq %key%*”/f rem 只要标题前面是"key"的窗口都关闭 pause
启动指定应用
@echo off
if %1=="hexo" goto HEXO
:HEXO
REM 启动HEXO博客系统
cd E:\WorkBlog
e:
hexo server -p 80
exit