windous批处理

1.ECHO

    显示信息,或将命令回显打开或关上。编程

    ECHO [ON | OFF]windows

    ECHO [message]测试

    要显示当前回显设置,键入不带参数的 ECHO。spa

2.PAUSE

    暂停批处理程序,并显示如下消息:命令行

    请按任意键继续. . .code

3.CLS

    清除屏幕。token

4.REM

    在批处理文件或 CONFIG.SYS 里加上注解或说明。ip

    REM [comment]rem

    PS:其实能够用"::"代替"REM",能够提升执行速度,不过REM的兼容性更好,我仍是建议你们用rem注释字符串

5.SET

    1.给变量赋值(撤销)

@echo off
set str=My name is Xiao
echo %str%
rem 批处理中的变量通常须要用%来扩展,详见特殊符号一节
pause>nul

 

@echo off
set str=ABCDEFGHIJKLMN
echo %str%
set str=
echo;%str%
rem 还记得加";"能够实现什么效果吗?一个空行,为何要这么作呢?想不出来的话去掉这个";"试试
pause>nul

     2.等待用户输入数据(开关/P)

@echo off
set /p name=请输入你的姓名:
set /p age=请输入你的年龄(纯数字):
echo 因此,%name%今年%age%岁咯?
pause>nul

   

    3.计算(开关/A)

@echo off
set /a num=(12*2)+(13*4)
echo (12x2)+(13x4)=%num%
pause>nul

  

() - 分组
! ~ - - 一元运算符
* / % - 算数运算符
+ - - 算数运算符
<< >> - 逻辑移位
- 按位“与”
^ - 按位“异”
| - 按位“或”
= *= /= %= += -= - 赋值
&= ^= |= <<= >>=
, - 表达式分隔符

     4.显示当前已定义变量

@echo off
@set
@pause>nul

6.IF

    1.IF的第一种用法,比较字符串

@echo off
set /p PW=请输入密码:
if %PW%==bat (
echo YES! 
) ELSE (
Rem [else] 为可选参数,表示不然,即若是变量PW等于bat则输出YES!不然输出NO! 
echo NO! 
)
pause>nul

    2.IF的第二种用法,比较数字

@echo off
set /p num1=请第一个输入数字:
set /p num2=请第二个输入数字:
if "%num1%" gtr "%num2%" (
echo 第一个数字大
) ELSE if "%num1%" EQU "%num2%" (
echo 同样大
  
) ELSE (
echo 第二个数字大 
)
pause>nul

------比较运算符-----
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于

    3.IF的第三种用法,检测文件(夹)是否存在

@echo off
if exist C:\windows (
echo 你的C盘有windows文件(夹^)
  
) else (
echo 你的C盘没有windows文件(夹^)
  
)
pause>nul

    4.IF的第四种用法,检测变量是否被定义

@echo off
set var=aiwozhonghua
if defined var (
echo 变量var已被定义,它的值为%var%
  
) else (
echo 变量var没有被定义
)
pause>nul

    5.IF的第五种用法,判断返回值(ERRORLEVEL)

@echo off
echo 1234>>test.txt
if errorlevel 0 ( echo 写入成功! ) else echo 写入失败
pause>nul

7.GOTO

    将 cmd.exe 导向到批处理程序中带标签的行。

    GOTO label

    label 指定批处理程序中用做标签的文字字符串。

    标签必须单独一行,而且以冒号打头。

    若是命令扩展名被启用,GOTO 会以下改变:

    GOTO 命令如今接受目标标签 :EOF,这个标签将控制转移到当前

    批脚本文件的结尾。不定义就退出批脚本文件,这是一个容易的

    办法。有关能使该功能有用的 CALL 命令的扩展名描述,请键入

    CALL /?。

@echo off
set /p pw=请输入密码:
if "%pw%"=="bathome" goto yes
goto :eof
rem 未定义的:eof会退出脚本文件
:yes
echo 密码正确!
pause>nul

8.FOR

    1.FOR

    对一组文件中的每个文件执行某个特定命令。

    FOR%variableIN (set) DO command [command-parameters]

    %variable 指定一个单一字母可替换的参数。

    (set) 指定一个或一组文件。可使用通配符。

    command 指定对每一个文件执行的命令。

    command-parameters    

    为特定命令指定参数或命令行开关。

@echo off
for %%i in (*.txt) do echo %%i
::这段代码会显示当前文件夹下全部的txt文件
pause>nul

    2.FOR /L

    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)。

@echo off
for /L %%a in (1 1 5) do echo %%a
pause>nul

    4.FOR /D

    FOR /D %variable IN (set) DO command [command-parameters]

    若是集中包含通配符,则指定与目录名匹配,而不与文件

    名匹配。

    这个命令的用法和上面差很少,只不过是枚举目录名,不详解了

    5.FOR /F

    or /f是一个非(丧)常(心)复(病)杂(狂)的命令...

    让咱们从它的第一个用法来说:

    FOR /F ["options"] %variable IN (file-set) DO command [command-parame

@echo off
echo 1,1 2,1 3,1 4,1;>>test.txt
echo A1,2 2,2 3,2 4,2;>>test.txt
echo 1,3 2,3 3,3 4,3;>>test.txt
echo A1,4 2,4 3,4 4,4;>>test.txt
rem 以上代码在当前文件夹下生成了一个test.txt,打开看看?
For /F %%i In (test.txt) Do Echo %%i
pause>nul
For /F "tokens=2" %%i In (test.txt) Do Echo %%i
pause>nul
For /F "tokens=3" %%i In (test.txt) Do Echo %%i
pause>nul
For /F "tokens=4" %%i In (test.txt) Do Echo %%i
pause>nul

    for /f 默认以空格为分隔符,将每一行分割为几个元素,而tokens就表示取第几个元素.但假如咱们要取的不是一个元素呢?须要所有显示出来怎么办?

    tokens=* 表示取全部元素,用%%i输出

@echo off
rem test.txt已经有了,就不生成了
for /f "delims=*" %%i in (test.txt) do echo %%i
pause>nul

    for /f同也能够处理字符串

FOR /F ["options"] %variable IN ("string") DO command [command-parameters]

    字符串须要用双引号引发来,其他用法同样,不过这里就要讲到usebackq参数了,for /f是支持处理多个文件的,文件直接用空格隔开(某些符号也能够),假如文件名中含有空格怎么办呢?那好像只能用双引号引发来了,可是用双引号引发来会被 识别成字符串的,这时就要请出usebackq参数了,加上这个参数,带引号的字符串也会被识别为文件~

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

用for /f来处理命令执行的结果,命令要用单引号引发来

例:

@echo off
for /f "skip=3" %%i in ('tasklist') do echo;%%i
pause>nul

~I - 删除任何引号("),扩充 %I
%~fI - 将 %I 扩充到一个彻底合格的路径名
%~dI - 仅将 %I 扩充到一个驱动器号
%~pI - 仅将 %I 扩充到一个路径
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到文件的文件属性
%~tI - 将 %I 扩充到文件的日期/时间
%~zI - 将 %I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个彻底合格的名称。若是环境变量名
未被定义,或者没有找到文件,此组合键会扩充到
空字符串
组合修饰符来获得多重结果:
%~dpI - 仅将 %I 扩充到一个驱动器号和路径
%~nxI - 仅将 %I 扩充到一个文件名和扩展名
%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩充到相似输出线路的 DIR
===================================================

批处理示例

    1. IF-EXIST

@echo off
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist
pause>nul

    

    若是C:\存在AUTOEXEC.BAT文件,那么它的内容就会被显示出来,若是不存在,批处理就会提示你该文件不存在。

说明:
(1) IF EXIST 是用来测试文件是否存在的,格式为
IF EXIST [路径+文件名] 命令
(2) test2.bat文件中的%1是参数,DOS容许传递9个批参数信息给批处理文件,分别为%1~%9(%0表示test2命令自己) ,这有点象编程中的实参和形参的关系,%1是形参,AUTOEXEC.BAT是实参。

    二、IF-ERRORLEVEL

    IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,并且返回值必须依照从大到小次序顺序判断。

@ECHO OFF
XCOPY test.BAT D:
IF ERRORLEVEL 1 ECHO 文件拷贝失败
IF ERRORLEVEL 0 ECHO 成功拷贝文件
pause>nul

相关文章
相关标签/搜索