• 批处理教程


    @ECHO OFF

    REM 判断文件是否存在

    IF EXIST example.txt ECHO found it

    REM 组合命令和js的短路径操作类似

    DIR example.txt && ECHO found it too

    REM 追加方式到处内容到文件

    ECHO not bad day >> exmple.txt

    REM 最简单的组合命令, 类似js的逗号运算符, 组合多条语句

    ECHO hello & ECHO world!

    REM 这是注释,为了让地球人看懂

    ECHO comments example

    REM |(前一个命令的输出 作为后一个命令的输入) more 一屏一屏的显示后面的内容 Enter 1行, 空格 1屏

    :: help | more

    :: more longArticle.txt

    :: type longArticle.txt

    REM || 短路径操作 参考js

    DIR setup_*.exe || echo can see me

    DIR foo.ttt & DIR foo.txt || ECHO can not see me 2

    DIR foo.ttt && DIR foo.txt || ECHO can see me 2

    REM 输入重定向 < >& <&

    :: more < longArticle.txt

    REM 输出重定向 > >>

    :: echo has some good idea > haha.txt
    :: echo come on >> haha.txt


    REM call命令 从1个批处理调用另1个批处理 且接受入参

    call hi.bat sindy

    :: hi.bat
    :: echo hello, %1

    REM choice命令 提示用户输入1个字母进行选择 它的返回码为1234……

    CHOICE /C abc /M apple,banana,coffee

    :: 用户选择的值,存在变量 %errorlevel%中

    if %errorlevel% == 3 goto coffee
    if %errorlevel% == 2 goto banana
    if %errorlevel% == 1 goto apple

    :apple
    echo you like apple
    goto end

    :banana
    echo you like banana
    goto end

    :apple
    echo you like coffee
    goto end

    :end
    echo goodbye

    REM find命令 find string 注意这个string需要双引号

    netstat -an > a.txt
    type a.txt | find "5355" && echo yes,you found the string


    REM if命令 判断入参

    if "%1"=="" goto usage

    if "%1"=="/?" goto usage

    if "%1"=="help" goto usage

    :: if not "%1"="" goto somejob


    :usage
    ECHO this is something about how to use bat


    REM 判断文件是否存在

    IF EXIST *.jpg DEL *.jpg

    :: IF NOT EXIST *.jpg MKDIR pic

    :: DOS程序在运行完后都有返回码),如果和定义的错误码符合(这里定义的错误码为1),则执行相应的操作(这里相应的操作为pause & edit %1.asm部分)

    ::masm %1.asm

    ::if not errorlevel 1 link %1.obj

    ::pause & edit %1.asm

    :: ------------------------

    ::masm %1.asm

    ::if exist %1.obj link %1.obj

    ::else pause & edit %1.asm


    REM IF [NOT] ERRORLEVEL number do command

    REM IF [NOT] string1==string2 do command

    REM IF [NOT] EXIST filename do command


    :: 在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable 而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.

    FOR /F "usebackq delims==" %%i IN (`set`) DO @echo %%i

    :: 根据用户输入设置环境变量

    SET /p yourname=input your name:

    :: 直接设置环境变量
    SET yourname=alice
    ECHO %yourname%

    :: 读取文件内容设置环境变量 输入重定向
    SET /p yourname= < me.txt

    FOR /F %%i in (me.txt) DO @SET yourname=%%i

    :: 延迟环境变量读取

    1. 命令行中执行如下:

    cmd /v:on  ::延迟

    cmd /v:off ::不延迟

    2. 批处理中执行如下:

    setlocal EnableDelayedExpansion

    setlocal disableDelayedExpansion

    ~~设置命令行窗口的字符编码

    1. chcp 65001  // utf-8编码

    2. 命令行窗口属性-->字体-->Lucida console

    恢复默认的GBK编码

    chcp 936  //gbk的codepage==936

    ~~ if  .. else .. 并且可以使用括号包括多条命令

    @echo off
    echo.
    :: can we use if condition () else () syntax?
    if exist foo.ttt (
    echo yes,found it
    ) else (
    echo no, missing
    )

    echo the end..

    pause

    ~~~set读取文件内容 并数学运算+1

    @echo off
    @echo number + 1 for each time call this bat
    set /p num= < number.txt
    @echo.
    @echo.
    @echo current number is: %num%
    @echo.

    set /a sum=%num%+1
    @echo %sum% > number.txt

    :: set /a sum+=1

    pause

    ~~变量延迟

    @echo off

    setlocal enabledelayedexpansion

    ::great , can use brackets like this, so if can follow multiplte cmd
    set VAR=before
    if "%VAR%" == "before" (
    ::set pro
    echo cmd one
    echo cmd two
    set VAR=after
    if "%VAR%" == "after" @echo you won't see this, when var not delayed
    echo %VAR%
    )

    pause

    set VAR2=before2
    if "%VAR2%" == "before2" (
    echo command one
    echo command two
    set VAR2=after2
    echo command three
    if "!VAR2!" == "after2" @echo var has been delayed
    echo !VAR2!
    )

    endlocal


    pause

    ----------------------------------------

    set 命令
    ----------------------------------------

    SET [variable=[string]]
    SET /P variable=[promptString]
    SET /A expression

    示例1:
    @echo off
    set
    pause
    显示所有的变量的值

    示例2:
    @echo off
    set var=我是值
    echo %var%
    pause
    请看 set var=我是值 ,这就是BAT直接在批处理中设置变量的方法!
    set 是命令 var是变量名 =号右边的"我是值"是变量的值
    在批处理中我们要引用这个变量就把var变量名用两个%(百分号)扩起来,如%var%

    @echo off
    set /p var=请输入你的名字:
    echo 您的名字是:%var%
    pause
    set /p 是命令语法 var是变量名 =号右边的"请输入变量的值: ",这个是提示语,不是变
    量的值了!
    运行后,我们在提示语后面直接输入robin,就会显示一行您” 您的名字是:robin”

    set的/A参数就是让SET可以支持数学符号进行加减等一些数学运算!

    set /a var=1 + 1
    set /a var=2 - 1 结果是多少呢?如果你看不到结果就echo %var%.....
    set /a var=2 * 2 乘法运算
    set /a var=2 / 2 除法运算
    set /a var=(1+1) + (1+1) 结果等于4 看得懂吧!

    @echo off
    set /a a=1+1,b=2+1,c=3+1
    echo %a% %b% %c%

    set /a var+=1
    set /a var*=2

     ---------------

    获取日期和时间

    rem CODE BY t0nsha 
    rem 关于提取date,time输出结果的一个批处理 
    rem “:”(冒号)和“~”波浪号必不可少! 
    rem “~”后的数字:为正数表示舍弃输出结果的前几位;直接跟负数表示取到输出结果的后第几位。 
    rem “,”后的数字:为正数表示取到输出结果的前第几位;为负数表示舍弃输出结果的后几位。 
    echo %date% 
    echo %date:~4% 
    ::下行表示舍弃前0位,取到第10位(即取输出结果的前10位) 
    echo %date:~0,10% 
    echo %date:~4,-5% 
    pause 
    echo %time% 
    echo %time:~-3% 
    echo %time:~2,-3% 
    pause 
    echo %date:~4% %time:~0,-3% 
    pause

    -----------------------------------------------
    环境变量 替换或删除匹配字符

    @echo off
    echo.
    REM 设置环境变量为空格
    SET "space= "
    ECHO Your%space%role%space%is%space%coder
    ECHO

    REM 环境变量的值进行字符串替换
    SET "VAR=he doesn't care about the exam result"
    ::find=rep 查找等号左边的字符,替换为右边指定的字符
    ECHO %VAR: =_%
    ECHO.

    ::当等号右边无指定字符,则删除匹配的字符
    ECHO %VAR: =%
    ECHO.

    ::可以用通配符*, %var:*'=R% *'匹配第一个'和它之前的内容
    ECHO %VAR:*'=removed,%
    ECHO.

    PAUSE

    -------------------------------------------------------


    BTW

    使用批处理产生日期(时间)文件、文件夹 帮别人整Sql     server自动备份
    发现无法使用网络映射驱动器作为备份文件存放路径
    而本机磁盘空间实在是不够
    于是决定在本机只备份最新2天数据
    再写个批处理,做成系统调度
    每周将备份数据复制到网络驱动器上存档

    从网上搜到批处理产生日期文件的办法
    下面是实现的比较好的

    批处理文件:
    @echo off
    set aFile=bak-%DATE:~4,4%%DATE:~9,2%%DATE:~12,2%
    set bFile=bak-%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
    set cFile=bak-%DATE%
    echo Afile=%aFile%
    echo Bfile=%bFile%
    echo Cfile=%cFile%

    输出:
    Afile=bak-20061219
    Bfile=bak-113202
    Cfile=bak-星期二 2006-12-19

    于是备份bat就好写了
    @echo off
    echo 正在备份数据到网络驱动器。。。
    set folder=%DATE%
    md "y:/%folder%"
    copy d:/DataBak/*.BAK "y:/%folder%"
    echo 备份完毕。

    ------------------------------------------------------------------------------------------------------
    @echo off
    set AFile=bak-%DATE:~4,4%%DATE:~9,2%%DATE:~12,2%
    set BFile=bak-%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
    echo AFile=%AFile%.rar
    echo BFile=%BFile%.rar


    运行此批处理的结果:
    AFile=bak-20060109.rar ------- 年月日 -- 8位
    BFile=bak-140650.rar ---------- 时分秒 -- 6位

    另:如果小时数只有一位数字,造成中间有空格而出错的问题,请使用如下方法补0
    set hh=%time:~0,2%
    if /i %hh% LSS 10 (set hh=0%time:~1,1%)

  • 相关阅读:
    Informatica_(6)性能调优
    Informatica_(5)高级应用
    Informatica_(4)工作流
    Informatica_(3)组件
    Informatica_(2)第一个例子
    Informatica_(1)安装
    Linux_(4)Shell编程(下)
    Linux_(3)Shell编程(上)
    Linux_(2)基本命令(下)
    B
  • 原文地址:https://www.cnblogs.com/stephenykk/p/4485720.html
Copyright © 2020-2023  润新知