bat脚本

--莫非

BAT脚本与shell脚本区别

Shell脚本使用Linux/Unix下的命令,一般文件开头以#号来告诉系统这个脚本需要什么解释器来执行(如:#!/bin/bash采用bash而不是dash来执行)。而bat文件是dos下的批处理文件。批处理文件是无格式的文本文件,它包含一条或多条命令,它的文件扩展名为.bat 或.cmd。

常用命令1:where、cls、title、color、mode con

Where

显示符合搜索模式的文件位置: Where \R C:\ *.dll        \F \T

Cls:清屏

Title

设置控制台BAT的标题

Color

设置bat显示的背景和前景色:color 02 (背景黑色,字符绿色)

MODE CON

设置bat的设置窗体大小:MODE CON COLS=200 LINES=1000

常用命令2:@、echo、::、rem、pause、:和goto、%以及if

@

@的作用就是让脚本在执行时不显示命令部分:@echo off

echo

echo命令的另一种用法一:可以用它来显示信息:echo Edit by CODERED

echo命令的另一种用法二:可以直接编辑文本文件:echo nbtstat -A 192.168.0.1 > a.bat

::、rem

::和rem是注释命令:  ::close echo

与rem不同的是,::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态,另外,rem 可以用于config.sys文件中.

pause

pause是暂停命令:pause

:和goto

goto是个跳转命令,: 是一个标签,当程序运行到goto时,将自动跳转到:定义的部分去执行了:

……

goto end

……

:end

%

%是批处理变量引导符,为命令行传递给批处理的参数(多个%一起使用的情况除外,以后还将详细介绍):

set p=”abcdefg” & echo %p:~3,2%

If

输入判断: if "%1"=="" goto usage

存在判断:

if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif

结果判断: if errorlevel 1 pause & edit %1.asm

常用命令3:call、find、for、set、shift

Call

call命令用来从一个批处理脚本中调用另一个批处理脚本:

echo %1 This is a call example.

call a.bat

find

find用来在文件中搜索特定字符串,通常也作为条件判断的铺垫程序:

type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"

shift

改变传入的参数偏移量,如将%3移位到%2,将%4移位到%3,等等;并且不影响%0和%1:

SHIFT /2

Set

显示、设置或删除cmd.exe环境变量。

    • Set path=”D:\”
    • Set /p input=请输入: & echo 你输入的是:%input%
    • setlocal enabledelayedexpansion

Set /p input=请输入: & echo 你输入的是:!input!

For

基本格式:

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

/D参数(匹配目录):

for /d %%i in (c:\*) do echo %%i

/R参数(匹配文件)

for /r [c:\] %%i in (???.exe) do if exist %%i echo %%i

/L参数(该集表示以增量形式从开始到结束的一个数字序列)

for /l %%i in (1,1,5) do @echo %%i

/F参数

使用文件解析来处理命令输出、字符串及文件内容。使用迭代变量定义要检查的内容或字符串,并使用各种options选项进一步修改解析方式。默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。

for /f "[] delims=" %%i in ('net user') do @echo %%i

管道命令 |、>、>>、>、>&、<&

|

|命令的作用,就是让前一命令的输出当做后一命令的输入:

help | more,ipconfig /all | find “IPv4”

>

>会清除掉原有文件中的内容后把新的内容写入原文件: echo @echo off > a.bat

>>

>>只会另起一行追加新的内容到原文件中,而不会改动其中的原有内容:

echo exit >> a.bat

<

<是输入重定向命令,从文件中读入命令输入,而不是从键盘中读入

>&

>&将一个句柄的输出写入到另一个句柄的输入中

<&

<&刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中

组合命令:&、&&、||

组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行,那么这多个命令就要用这些组合命令连接起来放在同一行,因为批处理认行不认命令数目

&

&命令作用是用来连接n个DOS命令,并把这些命令按顺序执行,而不管是否有命令执行失败:

copy a.txt b.txt /y & del a.txt

&&

&&可以把它前后两个命令组合起来当一个命令来用,一旦发现有命令出错将不继续执行剩下的命令:

dir 文件://1%/www/user.mdb && copy 文件://1%/www/user.mdb e:\backup\www

if exist 文件://1%/www/user.mdb copy 文件://1%/www/user.mdb e:\backup\www

dir c:\ && dir d:\ > a.txt;

得不到预期结果必须:

dir c:\ > a.txt && dir d:\ >> a.txt

||

||命令执行正确就退出此命令组合,不再执行剩下的命令:

dir s*.exe || echo Didn't exist file s*.exe & pause & exit

其他符号:,、;、””、()、!

;

分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行。

dir c:\;d:\;e:\;z:\ > 1.txt

逗号相当于空格,在某些情况下“,”可以用来当做空格使用:

dir,C:\

“”

双引号允许在字符串中包含空格:

cd,"C:\ program files"

()

小括号在批处理编程中有特殊的作用,左右括号必须成对使用,括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行。

(echo a && echo bb) > 1.txt

!

在变量延迟问题中,用来表示变量,即%var%应该表示为!var!

Set /p input=请输入: & echo 你输入的是:!input!

if…else…条件语句

DOS条件语句主要有以下形式

IF [NOT] ERRORLEVEL number command

IF [NOT] string1==string2 command

IF [NOT] EXIST filename command

增强用法:IF [/I] string1 compare-op string2 command

增强用法中加上/I就不区分大小写了!

增强用法中还有一些用来判断数字的符号:

EQU - 等于

NEQ - 不等于

LSS - 小于

LEQ - 小于或等于

GTR - 大于

GEQ - 大于或等于

上面的command命令都可以用小括号来使用多条命令的组合,包括else子句,组合命令中可以嵌套使用条件或循环命令。

IF EXIST filename (

del filename

) ELSE (

echo filename missing

)

循环语句

指定次数循环

FOR /L %variable IN (start,step,end) DO command [command-parameters]

组合命令:

FOR /L %variable IN (start,step,end) DO (

Command1

Command2

……

)

对某集合执行循环语句。

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

%%variable

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

(set)

指定一个或一组文件。可以使用通配符。

command

对每个文件执行的命令,可用小括号使用多条命令组合。

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

同前面一样,command可以用括号来组合:

FOR /R [[drive:]path] %variable IN (set) DO (

Command1

Command2

……

commandn

)

条件循环

上面的循环结构是用for命令来实现的,for命令循环有一个缺点,就是整个循环被当作一条命令语句,涉及到变量延迟的问题。

利用goto语句和if条件判断,dos可以实现条件循环:

@echo off

set var=0

rem ************循环开始了

:continue

set /a var+=1

echo 第%var%次循环

if %var% lss 100 goto continue

rem ************循环结束了

echo 循环执行完毕

pause

子程序

在批处理程序中可以调用外部可运行程序,比如exe程序,也可调用其他批处理程序,批处理可以调用本程序中的一个程序段,相当于子程序,这些子程序一般放在主程序后面。

子程序调用格式:

CALL :label arguments

子程序语法:

:label

command1

command2

......

commandn

goto :eof

在子程序段中,参数%0指标签:label

子过程一般放在最后,并且注意在主程序最后要加上exit或跳转语句,避免错误的进入子过程。

子程序和主程序中的变量都是全局变量,其作用范围都是整个批处理程序。

传至子程序的参数在call语句中指定,在子程序中用%1、%2至%9的形式调用,而子程序返回主程序的数据只需在调用结束后直接引用就可以了,当然也可以指定返回变量。

打印你好:

@echo off

call :sub return

echo 子程序返回值:%return%

pause

goto :eof

:sub

set %1=你好

goto :eof

设计一个求多个整数相加的子程序:

@echo off

set sum=0

call :sub 10 20 35 40 50

echo 数据求和结果:%sum%

pause

goto :eof

:sub

rem 参数1为返回变量名称

set /a sum+=%1

shift /1

if not "%1"=="" goto sub

goto :eof

运行结果:155

变量嵌套与命令嵌套

和其它编程语言相比,dos功能显得相对简单,要实现比较复杂的功能,需要充分运用各种技巧,变量嵌套与命令嵌套就是此类技巧之一。

简单的说,命令嵌套首先用一条dos命令生成一个字符串,而这个字符串是另一条dos命令,用call语句调用字符串将其执行,从而得到最终结果。

用call语句实现命令嵌套:

@echo off

set str1=aaa echo ok bbb

echo 初始字符串:%str1%

echo 生成命令字符串如下:

echo %str1:~4,7%

echo 运行命令字符串生成最终结果为:

call %str1:~4,7%

pause

bat脚本

--莫非

BAT脚本与shell脚本区别

Shell脚本使用Linux/Unix下的命令,一般文件开头以#号来告诉系统这个脚本需要什么解释器来执行(如:#!/bin/bash采用bash而不是dash来执行)。而bat文件是dos下的批处理文件。批处理文件是无格式的文本文件,它包含一条或多条命令,它的文件扩展名为.bat 或.cmd。

常用命令1:where、cls、title、color、mode con

Where

显示符合搜索模式的文件位置: Where \R C:\ *.dll        \F \T

Cls:清屏

Title

设置控制台BAT的标题

Color

设置bat显示的背景和前景色:color 02 (背景黑色,字符绿色)

MODE CON

设置bat的设置窗体大小:MODE CON COLS=200 LINES=1000

常用命令2:@、echo、::、rem、pause、:和goto、%以及if

@

@的作用就是让脚本在执行时不显示命令部分:@echo off

echo

echo命令的另一种用法一:可以用它来显示信息:echo Edit by CODERED

echo命令的另一种用法二:可以直接编辑文本文件:echo nbtstat -A 192.168.0.1 > a.bat

::、rem

::和rem是注释命令:  ::close echo

与rem不同的是,::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态,另外,rem 可以用于config.sys文件中.

pause

pause是暂停命令:pause

:和goto

goto是个跳转命令,: 是一个标签,当程序运行到goto时,将自动跳转到:定义的部分去执行了:

……

goto end

……

:end

%

%是批处理变量引导符,为命令行传递给批处理的参数(多个%一起使用的情况除外,以后还将详细介绍):

set p=”abcdefg” & echo %p:~3,2%

If

输入判断: if "%1"=="" goto usage

存在判断:

if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif

结果判断: if errorlevel 1 pause & edit %1.asm

常用命令3:call、find、for、set、shift

Call

call命令用来从一个批处理脚本中调用另一个批处理脚本:

echo %1 This is a call example.

call a.bat

find

find用来在文件中搜索特定字符串,通常也作为条件判断的铺垫程序:

type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"

shift

改变传入的参数偏移量,如将%3移位到%2,将%4移位到%3,等等;并且不影响%0和%1:

SHIFT /2

Set

显示、设置或删除cmd.exe环境变量。

    • Set path=”D:\”
    • Set /p input=请输入: & echo 你输入的是:%input%
    • setlocal enabledelayedexpansion

Set /p input=请输入: & echo 你输入的是:!input!

For

基本格式:

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

/D参数(匹配目录):

for /d %%i in (c:\*) do echo %%i

/R参数(匹配文件)

for /r [c:\] %%i in (???.exe) do if exist %%i echo %%i

/L参数(该集表示以增量形式从开始到结束的一个数字序列)

for /l %%i in (1,1,5) do @echo %%i

/F参数

使用文件解析来处理命令输出、字符串及文件内容。使用迭代变量定义要检查的内容或字符串,并使用各种options选项进一步修改解析方式。默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。

for /f "[] delims=" %%i in ('net user') do @echo %%i

管道命令 |、>、>>、>、>&、<&

|

|命令的作用,就是让前一命令的输出当做后一命令的输入:

help | more,ipconfig /all | find “IPv4”

>

>会清除掉原有文件中的内容后把新的内容写入原文件: echo @echo off > a.bat

>>

>>只会另起一行追加新的内容到原文件中,而不会改动其中的原有内容:

echo exit >> a.bat

<

<是输入重定向命令,从文件中读入命令输入,而不是从键盘中读入

>&

>&将一个句柄的输出写入到另一个句柄的输入中

<&

<&刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中

组合命令:&、&&、||

组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行,那么这多个命令就要用这些组合命令连接起来放在同一行,因为批处理认行不认命令数目

&

&命令作用是用来连接n个DOS命令,并把这些命令按顺序执行,而不管是否有命令执行失败:

copy a.txt b.txt /y & del a.txt

&&

&&可以把它前后两个命令组合起来当一个命令来用,一旦发现有命令出错将不继续执行剩下的命令:

dir 文件://1%/www/user.mdb && copy 文件://1%/www/user.mdb e:\backup\www

if exist 文件://1%/www/user.mdb copy 文件://1%/www/user.mdb e:\backup\www

dir c:\ && dir d:\ > a.txt;

得不到预期结果必须:

dir c:\ > a.txt && dir d:\ >> a.txt

||

||命令执行正确就退出此命令组合,不再执行剩下的命令:

dir s*.exe || echo Didn't exist file s*.exe & pause & exit

其他符号:,、;、””、()、!

;

分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行。

dir c:\;d:\;e:\;z:\ > 1.txt

逗号相当于空格,在某些情况下“,”可以用来当做空格使用:

dir,C:\

“”

双引号允许在字符串中包含空格:

cd,"C:\ program files"

()

小括号在批处理编程中有特殊的作用,左右括号必须成对使用,括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行。

(echo a && echo bb) > 1.txt

!

在变量延迟问题中,用来表示变量,即%var%应该表示为!var!

Set /p input=请输入: & echo 你输入的是:!input!

if…else…条件语句

DOS条件语句主要有以下形式

IF [NOT] ERRORLEVEL number command

IF [NOT] string1==string2 command

IF [NOT] EXIST filename command

增强用法:IF [/I] string1 compare-op string2 command

增强用法中加上/I就不区分大小写了!

增强用法中还有一些用来判断数字的符号:

EQU - 等于

NEQ - 不等于

LSS - 小于

LEQ - 小于或等于

GTR - 大于

GEQ - 大于或等于

上面的command命令都可以用小括号来使用多条命令的组合,包括else子句,组合命令中可以嵌套使用条件或循环命令。

IF EXIST filename (

del filename

) ELSE (

echo filename missing

)

循环语句

指定次数循环

FOR /L %variable IN (start,step,end) DO command [command-parameters]

组合命令:

FOR /L %variable IN (start,step,end) DO (

Command1

Command2

……

)

对某集合执行循环语句。

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

%%variable

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

(set)

指定一个或一组文件。可以使用通配符。

command

对每个文件执行的命令,可用小括号使用多条命令组合。

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

同前面一样,command可以用括号来组合:

FOR /R [[drive:]path] %variable IN (set) DO (

Command1

Command2

……

commandn

)

条件循环

上面的循环结构是用for命令来实现的,for命令循环有一个缺点,就是整个循环被当作一条命令语句,涉及到变量延迟的问题。

利用goto语句和if条件判断,dos可以实现条件循环:

@echo off

set var=0

rem ************循环开始了

:continue

set /a var+=1

echo 第%var%次循环

if %var% lss 100 goto continue

rem ************循环结束了

echo 循环执行完毕

pause

子程序

在批处理程序中可以调用外部可运行程序,比如exe程序,也可调用其他批处理程序,批处理可以调用本程序中的一个程序段,相当于子程序,这些子程序一般放在主程序后面。

子程序调用格式:

CALL :label arguments

子程序语法:

:label

command1

command2

......

commandn

goto :eof

在子程序段中,参数%0指标签:label

子过程一般放在最后,并且注意在主程序最后要加上exit或跳转语句,避免错误的进入子过程。

子程序和主程序中的变量都是全局变量,其作用范围都是整个批处理程序。

传至子程序的参数在call语句中指定,在子程序中用%1、%2至%9的形式调用,而子程序返回主程序的数据只需在调用结束后直接引用就可以了,当然也可以指定返回变量。

打印你好:

@echo off

call :sub return

echo 子程序返回值:%return%

pause

goto :eof

:sub

set %1=你好

goto :eof

设计一个求多个整数相加的子程序:

@echo off

set sum=0

call :sub 10 20 35 40 50

echo 数据求和结果:%sum%

pause

goto :eof

:sub

rem 参数1为返回变量名称

set /a sum+=%1

shift /1

if not "%1"=="" goto sub

goto :eof

运行结果:155

变量嵌套与命令嵌套

和其它编程语言相比,dos功能显得相对简单,要实现比较复杂的功能,需要充分运用各种技巧,变量嵌套与命令嵌套就是此类技巧之一。

简单的说,命令嵌套首先用一条dos命令生成一个字符串,而这个字符串是另一条dos命令,用call语句调用字符串将其执行,从而得到最终结果。

用call语句实现命令嵌套:

@echo off

set str1=aaa echo ok bbb

echo 初始字符串:%str1%

echo 生成命令字符串如下:

echo %str1:~4,7%

echo 运行命令字符串生成最终结果为:

call %str1:~4,7%

pause

bat脚本基本命令和格式的更多相关文章

  1. .bat脚本基本命令语法

    目录批处理的常见命令(未列举的命令还比较多,请查阅帮助信息)     1.REM 和 ::     2.ECHO 和 @     3.PAUSE     4.ERRORLEVEL     5.TITL ...

  2. .bat脚本基本命令语法 http://www.cnblogs.com/iTlijun/p/6137027.html

    这个是我找到的非常好的一篇文章了: 目录批处理的常见命令(未列举的命令还比较多,请查阅帮助信息)     1.REM 和 ::     2.ECHO 和 @     3.PAUSE     4.ERR ...

  3. 批处理(.bat脚本)基本命令语法

    .bat脚本基本命令语法   目录批处理的常见命令(未列举的命令还比较多,请查阅帮助信息)     1.REM 和 ::     2.ECHO 和 @     3.PAUSE     4.ERRORL ...

  4. bat脚本的基本命令语法

    bat脚本的基本命令语法 一.批处理的常见命令 1.REM 和 ::     2.ECHO 和 @     3.PAUSE     4.ERRORLEVEL     5.TITLE     6.COL ...

  5. bat脚本基础教程

    bat脚本就是DOS批处理脚本,就是将一系列DOS命令按照一定顺序排列而形成的集合,运行在windows命令行环境上.本文主要介绍bat脚本基础语法,希望完成本文内容学习之后具备基础的bat脚本开发能 ...

  6. bat脚本知识总结

    1常用基本命令 1.1 @ 它的作用是让执行窗口中不显示它后面这一行的命令本身 1.2 echo 它其实是一个开关命令,就是说它只有两种状态:打开和关闭.于是就有了echo on 和echo off两 ...

  7. 【转贴】bat脚本基础教程

    bat脚本基础教程 https://www.cnblogs.com/linyfeng/p/8072002.html 自己动手太少了. bat脚本就是DOS批处理脚本,就是将一系列DOS命令按照一定顺序 ...

  8. Bat 脚本学习 (基础篇)

    [转]Bat 脚本学习 2015-01-05 14:13 115人阅读 评论(0) 收藏 举报 基础部分: ============================================== ...

  9. windows bat脚本实现ftp自动下载 删除

    现在有一个需求就是把远程某个文件下面的图片,下载到本地,并且删除下载成功的的文件,而且远程目录下的那个图片会随时增加.假设一下如果所有的脚本都写好了,那么就需要调用windows上的计划任务定时执行脚 ...

随机推荐

  1. Spring Cloud Alibaba到底坑不坑?

    之前我发过一篇<说说我为什么看好Spring Cloud Alibaba>,然后这两天有网友给我转了这篇文章<坑爹项目spring-cloud-alibaba,我们也来一个>, ...

  2. 服务器linux centos 7.4 搭建ftp服务器

    此操作是在腾讯云服务器linux centos 7.4 完成搭建ftp服务器 vsftpd 的: 安装 vsftpd $ yum install vsftpd -y 启动 $ service vsft ...

  3. EF Core 快速上手——EF Core 入门

    EF Core 快速上手--EF Core 介绍 本章导航 从本书你能学到什么 对EF6.x 程序员的一些话 EF Core 概述 1.3.1 ORM框架的缺点 第一个EF Core应用   本文是对 ...

  4. oracle学习笔记(三) DCL 数据控制语言与 DDL 数据定义语言

    DCL 数据控制语言 Data control language 之前说过的授权和收权利语句 grant, revoke DDL 数据定义语言 Data define language create ...

  5. Spring Boot 整合 rabbitmq

    一.消息中间件的应用场景 异步处理 场景:用户注册,信息写入数据库后,需要给用户发送注册成功的邮件,再发送注册成功的邮件. 1.同步调用:注册成功后,顺序执行发送邮件方法,发送短信方法,最后响应用户 ...

  6. java--基本数据类型的转换(自动转换)

    概念:Java中,经常可以遇到类型转换的场景,从变量的定义到复制.数值变量的计算到方法的参数传递.基类与派生类间的造型等,随处可见类型转换的身影.Java中的类型转换在Java编码中具有重要的作用.首 ...

  7. .net 笔试面试总结(3)

    什么是Sql注入?如何避免Sql注入? 用户根据系统的程序构造非法的参数从而导致程序执行不是程序期望的恶意Sql语句. 使用参数化的Sql就可以避免Sql注入. 数据库三范式是什么? 第一范式:字段不 ...

  8. transform旋转,平移,缩放,扭曲 斜切

    transform  改变rotate 旋转translate  位移scale 缩放 skew  斜切变形 记得兼容性:-webkit-   -moz-    -ms-     -o- transf ...

  9. d3.csv()后获取的数据不是数组,而是对象

    我的csv文件: year,population 1953,5.94 1964,6.95 1982,10.08 1990,11.34 2000,12.66 2010,13.40 使用d3.csv()输 ...

  10. Maven入门教程(一)

    1.Maven的简介 1.1 什么是maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的.Maven是一个项目管理工具,它包含了一个项目对象模型 (Projec ...