【Windows批处理】常用命令

本文详细介绍了Windows批处理脚本的创建和常用命令,包括echo、@、pause、call、rem、set、goto、start、if、for、setlocal、shift等,并提供了实例解析其用法,帮助理解批处理脚本的执行流程。
摘要由CSDN通过智能技术生成

介绍

批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理。批处理文件的扩展名为 bat

批处理文件,或称为批处理程序,是由一条条的DOS命令组成的普通文本文件,可以用记事本直接编辑或用DOS命令创建

批处理可以在dos系统或windows系统上运行,所以批处理的命令比dos的命令要多,基本都是dos命令组成,但多了些流程控制命令

创建批处理文件

使用copy con命令创建

启动命令行,默认来到用户目录,运行 copy con 来创建批处理文件,将屏幕上输入的内容保存在 test.bat 中,使用 ctrl + z,然后按回车来保存
在这里插入图片描述
输入 test.bat 可以直接运行,如果当前目录下不存在 a.txt
在这里插入图片描述
echo hello> a.txt可以创建 a.txt 内容为 hello,使用 dir 来查看当前目录下文件看是否创建成功,如果存在 a.txt
在这里插入图片描述

使用记事本创建

新建 test.txt,内容如下,保存后,修改后缀 .txt 为 .bat
在这里插入图片描述
打开 cmd 运行
在这里插入图片描述

语法

echo

echo [message]:显示信息
echo {[on/off]}:开/关回显功能,如果将@echo off`放最前面,将不会显示命令本身,只显示输出结果

其中 type 可以显示文本文件的内容

echo on
type a.txt
echo off
echo Hello

在这里插入图片描述
可以看出,echo off 关闭回显(但其本身仍然会回显), 接下来的命令行不会回显

@

@用于关闭本命令回显,@ 并不受echo状态的影响,例如 @echo on,这条命令不显示,@type a.txt这条命令不显示,但命令执行结果(查看a.txt内容)会显示。

@echo on
@type a.txt
echo off
echo Hello

在这里插入图片描述
@只针对当前行有效,echo on/off针对后边的命令有效,直到下一个 echo on/off 命令出现

pause

pause用于暂停批处理的执行器并给出提示信息,然后由用户决定是继续执行还是终端执行

@echo off
echo pause命令测试...
pause
echo Hello World

执行pause以后会提示一句话【按任意键继续执行】
①当我们按任意键的时候,继续执行pause后面的语句,也是说继续执行
在这里插入图片描述
②当我们按ctrl+C的时候,会提示出,是不要终止批处理的提示,并且这个时候可以选择是继续还是终止
在这里插入图片描述

call

call命令用来从一个批处理脚本中调用另一个批处理脚本,并且能够调用指定标号后的命令(注意调用时必须在标签名前加冒号)。调用完毕后回到调用处继续执行后边的命令,这也就是为什么 A 后边的内容输出了两遍,看例子:

test.bat内容

@echo off
echo 正在调用called.bat...
call called.bat
echo 调用完毕called.bat...
echo 现在调用 A 标号后的内容...
call :A

:A
echo This is A

called.bat内容

@echo off
echo This is called.bat

在这里插入图片描述

rem

rem 为注释命令,该命令后的内容不被执行,但能回显

在 test.bat 中列出 后缀为 .bat 的文件

@echo off
rem 这是一个简单的批处理命令
dir *.bat

在这里插入图片描述
当 刚才的第一行 改为 @echo on,rem 能回显,但实际执行的时候,计算机会忽略 rem 这一行
在这里插入图片描述

set

set是专门用来创建、设置、查看或删除环境变量

@echo off
set xxx="C:\Users\00lix\Desktop\test\video"
set yyy="D:\KuGou"
echo 显示以x开头的变量
set x
dir /w %xxx%
rem 删除名为xxx的变量
set xxx=

在这里插入图片描述
解释下 命令。首先 使用 set 变量=值为 xxx 和 yyy 分别赋值,也就是两个路径
然后使用 set 参数来显示该变量或以该字符串为前缀的变量
dir /w 以宽格式显示列表,在每一行上最多显示 5 个文件名或目录名
最后使用set 变量名=删除该变量,注意:等号后面不能有空格

goto

goto label 跳转到要执行的标签,标签由冒号与标签名组成

  • 多个标签之间要加上exit终止程序继续向下运行
  • 同名的标签,程序执行最上面的一个
  • 标签名必须是常量,不能是变量
  • 标签名中可使用空格,但不得包括其他分隔符(例如分号或等号)
  • 命令只使用标签的前八个字符
@echo off
echo 跳过中间的命令,执行最后一条
goto last
echo 111
echo 222

:last
echo 333

在这里插入图片描述

start

启动单独的“命令提示符”窗口来运行指定程序或命令。如果在没有参数的情况下使用,start 将打开第二个命令提示符窗口,命令格式如下,还有很多参数,自行百度

start ["title"] [/WAIT][command/program]
“title”:在窗口标题栏中显示的标题
WAIT:启动应用程序并等候它结束

@echo off
echo 将在新窗口中显示a.txt的内容
start "a.txt"的内容 /wait type a.txt
echo 已从新命令窗口返回

在这里插入图片描述
运行程序后,打开了新窗口执行了命令,因为加了 /wait ,所以把新窗口关闭后,才能回到第一个窗口继续执行

if

如果 if 后面判断为真后,只处理单句命令的话,直接跟在 后面就可以
如果 判断为真后,需要执行多条命令的话,则需要用括号将多条命令扩起来
注意: 括号“(” 要位于跟 if 同一行,如果不在同一行的话执行时会报语法错误
注意2:多层嵌套的if语法如下

if exist a.txt (
  if exist 1.txt (
    echo 存在 a.txt 和 1.txt
  ) else (
    echo 存在 a.txt 但是不存在 1.txt
  )
) else if exist b.txt (
  echo 不存在 a.txt 但是存在 b.txt
) else (
  echo 不存在 a.txt 和 b.txt
)

如果你要将 else if 换行,需要在 “)” 后面添加 “^” 符号。

用法1:判断文件是否存在

@echo off
if exist a.txt (echo 存在a.txt) else (echo 不存在a.txt)

用法2:判断某两个字符串是否相等

@echo off
if "abc"=="abc" (echo 相等) else (echo 不相等)

默认情况if语句是区分大小写,可以添加/i参数取消大小写区分

@echo off
if /i "ABC"=="abc" (echo 相等) else (echo 不相等)

运行结果
在这里插入图片描述
用法3:判断数值是否相等
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于

@echo off
if 1 equ 2 (echo 1和2相等) else (echo 1和2不相等)

用法4:判断某个变量是否已经被赋值

@echo off
set var1=123
if defined var1 echo var1被定义了,值为%var1%
if defined var2 (echo var2被定义了) else (echo var2没被定义)

在这里插入图片描述
用法5:if结合errorlevel使用
IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值
环境变量errorlevel的初始值为0,当一些命令执行不成功,就会返回一个数值,如:1 ,2 等

for

@echo off
set /a sum=0
for %%x in (*.txt) do (
	echo %%x文件内容如下:
	type %%x
	echo.
	set /a sum=sum+1
)
echo 一共显示了%sum%个文本文件

在这里插入图片描述
set /a 是指定一个变量等于一串运算字符
echo.相当于我们打字时按了一下回车
%%x是for语句中对形式变量的引用

setlocal

启动批处理文件中环境变量的本地化。本地化将持续到出现匹配的 endlocal 命令或者到达批处理文件结尾为止

@echo off
setlocal
path=d:\
echo 局部环境变量path的值:
set path
endlocal
echo 系统环境变量path的值:
set path

在这里插入图片描述
set path 是查看path环境变量的值

shift

更改批处理文件中可替换参数的位置
语法:Shift [/n]
设置批处理从第n个参数开始移位,n的值为0~8

@echo off
:round
if "%0"=="" goto end
echo %0内容如下:
type %0
echo.
shift
goto round
:end

在这里插入图片描述
首先是一个 round 标签,先判断第一个参数是否为空,如果为空则表示没提供参数,程序直接结束
参数不为空时,显示文件内容
遇到shift时, shift 将所有参数往前移动一位
%0 是第一个 test.bat
%1 是 a.txt
%2 是 b.txt

* 和 ?

*表示任意多个字符,包括0个
?表示任意单个字符

@echo off
if exist *.txt echo 当前文件夹下有文本文件
echo 以a开头的目录如下:
dir /d /w /b a*
echo.
echo 以dk开头、第三个字符为任意字符、第四个字符为t、扩展名为三个字符且以do开头的文件如下:
dir /b /w dk?t.do?

在这里插入图片描述
dir 的参数可以使用 dir /?来查看

<、>、>>

这批处理程序中的3个重定向符号,用于控制数据的输入或输出方式。<符号的右边是数据源,左边代表数据目的地;>>>符号的左边是数据源,>会替换目的数据,而>>符号是将数据源添加到目标数据之后

@echo off
echo 正在自动创建的批处理...
echo type a.txt > auto.bat
echo dir /b /w >> auto.bat
echo 被自动创建的auto.bat文件的内容如下:
type auto.bat
echo.
echo 排序后的auto.bat为:
sort < auto.bat

在这里插入图片描述
打开新创建的 auto.bat,内容如下:

echo type a.txt > auto.bat是把 type a.txt输入到 auto.bat 中,替换
echo dir /b /w >> auto.bat是把 dir /b /w追加到 auto.bat 中
sort < auto.bat 是把 auto.bat 的内容 传递给 sort 进行排序

|

管道符|将一个命令的输出数据提取出来,然后将提取的数据作为另一个命令的输入

@echo off
find "naughty" story.txt | sort > result.txt
echo 对包含“naughty”单词的行排序后如下:
type result.txt

其中 story.txt 内容如下:
在这里插入图片描述
在这里插入图片描述

批处理首先在“story.txt"文件中找出所有包含“naughty”的行,接着将找出的结果通过|传给“sort" 命令进行排序,最后将排序结果保存到“result.txt" 文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值