bat 脚本

bat脚本基本命令和格式
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 “[eol=; skip=1] 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

<think>嗯,用户现在想了解BAT脚本的使用方法、编写指南和示例教程。首先,我需要回顾之前提供的引用内容,看看有没有相关的信息。引用[1]和[2]都提到BAT脚本的基本概念和用途,比如自动化任务、文件操作等。引用[3]虽然讲的是sed命令,但用户的问题不涉及这个,可能可以忽略。 用户之前可能已经看过一些入门资料,现在需要更具体的指导和示例。我应该从基础结构开始,比如如何创建bat文件,常用命令如echo、rem、@echo off等。然后,分步骤介绍不同的应用场景,比如文件操作、系统管理、流程控制等,每个部分都给出示例代码。 需要注意用户提到的“编写指南”和“示例教程”,所以结构要清晰,步骤明确。可能还需要比较bat脚本和其他脚本的区别,比如PowerShell,但用户没有提到,暂时不需要深入。 还要确保符合系统级指令,行内数学表达式用$...$,不过bat脚本内容可能用不上数学公式,但如果有变量替换的话可能需要用%符号,这部分要正确显示。独立代码块用三个反引号包裹,并注明语言为bat直接文本。 另外,用户可能需要常见错误和调试技巧,比如语法错误、路径问题,这些在示例中要提到。最后生成相关问题,帮助用户进一步学习,比如如何传递参数、优化脚本、任务计划等。 需要检查引用标记是否正确,比如引用[^1]和[^2]来自之前的资料。确保回答结构清晰,分步骤说明,每个示例都有注释,解释代码的作用。同时,语言要口语化,避免过于技术化,让新手也能理解。</think>### BAT脚本编写指南与示例教程 #### 一、基础结构与创建方法 1. **文件格式**:BAT脚本以`.bat``.cmd`为扩展名,可用记事本代码编辑器创建 2. **基础指令**: - `@echo off` 关闭命令回显 - `echo 文本` 输出内容 - `rem` `::` 注释语句 - `pause` 暂停执行 ```bat @echo off echo 正在执行系统清理... del /q C:\temp\*.tmp echo 清理完成! pause ``` #### 二、常用功能实现(含示例) 1. **文件操作** ```bat :: 批量重命名文件 @echo off setlocal enabledelayedexpansion set i=1 for %%f in (*.txt) do ( ren "%%f" "document_!i!.txt" set /a i+=1 ) ``` 2. **系统管理** ```bat @echo off :: 自动关闭指定进程 taskkill /f /im notepad.exe :: 创建每日备份目录 mkdir C:\Backup\%date:~0,4%%date:~5,2%%date:~8,2% ``` 3. **流程控制** ```bat @echo off :: 条件判断示例 if exist "D:\重要文件.txt" ( echo 找到目标文件 xcopy "D:\重要文件.txt" "E:\备份\" /y ) else ( echo 文件不存在! ) ``` #### 三、进阶技巧 1. **参数传递**:使用`%1`-`%9`接收参数 ```bat @echo off echo 第一个参数:%1 echo 第二个参数:%2 ``` 2. **错误处理**:通过`errorlevel`判断执行状态 ```bat @echo off net use Z: \\server\share if %errorlevel% neq 0 ( echo 网络映射失败! exit /b 1 ) ``` 3. **任务计划集成**:配合Windows任务计划程序实现定时执行[^2] #### 四、调试与优化 1. **调试模式**:去掉`@echo off`查看执行过程 2. **变量追踪**:使用`set var`显示变量值 3. **执行超时**:`timeout /t 5`设置5秒等待 #### 五、典型应用场景 1. 批量安装软件 2. 定期清理日志文件 3. 自动化系统配置 4. 多程序联动执行[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值