bat批处理常用命令

bat解释

批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 或cmd。

批处理文件,在DOS和Windows(任意)系统中,.bat文件是可执行文件,由一系列命令构成,其中可以包含对其他程序的调用。这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。

批处理文件批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。

bat文件和cmd文件的区别

  1. 在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建、编辑和查看
  2. 两者所用的命令行代码也是共用的,只是cmd文件中允许使用的命令要比bat文件多。
  3. cmd文件只有在windows2000以上的系统中才能运行,而bat文件则没有这个限制。cmd文件的描述是“windows nt命令脚本”, bat文件的描述是“ms dos批处理文件”。

常用命令

echo

打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
语法:echo [{ on|off }] [message]

@echo off

echo hello world

pause
@

表示不显示@后面的命令。在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令。

@echo off
goto

指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
语法:goto label (label是参数,指定所要转向的批处理程序中的行。)

@echo off
:start
set /p a=please enter revision:
if "%a%"=="" (
    echo the value of parameter a is empty
	goto start
)
pause
rem

注释命令,在C语言中相当与/--------/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。

rem 这是一段注释
pause

中断执行的语句。这个中断不是立即停止,只是暂停,按下任意键之后就会继续执行下面的语句。而且应该不止可以用一次,在一个批处理命令中,可以尝试使用多个pause命令。

@echo off

echo hello world

pause
call

从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 call,它将不会在命令行起作用。
语法:call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]

参数:[Drive: }[Path] FileName
指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。

start

启动单独的“命令提示符”窗口来运行指定程序或命令。如果在没有参数的情况下使用,start 将打开第二个命令提示符窗口。
语法:
start [“title”] [/dPath] [/min] [/max] [{/separate |/shared}] [{/low | /normal | /high | /realtime | /abovenormal | belownormal}][/wait] [/B] [FileName] [parameters]

start a.bat

参数

  1. “title” 指定在“命令提示符”窗口标题栏中显示的标题。
  2. /dpatch 指定启动目录。
  3. /i 将 Cmd.exe 启动环境传送到新的“命令提示符”窗口。
  4. /min 启动新的最小化窗口。
  5. /max 启动新的最大化窗口。
  6. /separate 在单独的内存空间启动 16 位程序。
  7. /shared 在共享的内存空间启动 16 位程序。
  8. /low 以空闲优先级启动应用程序。
  9. /normal 以一般优先级启动应用程序。
  10. /high 以高优先级启动应用程序。
  11. /realtime 以实时优先级启动应用程序。
  12. /abovenormal 以超出常规优先级的方式启动应用程序。
  13. /belownormal 以低出常规优先级的方式启动应用程序。
  14. /wait 启动应用程序,并等待其结束。
  15. /b 启动应用程序时不必打开新的“命令提示符”窗口。除非应用程序启用 CTRL+C,否则将忽略 CTRL+C 操作。使用 CTRL+BREAK 中断应用程序。
choice

使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c 参数,/c 后应写提示可输入的字符,之间无空格。它的返回码为1234……

@echo off 
:: /c按键列表 /m提示内容 /d默认选择 /t等待秒数   /d 必须和 /t同时出现
choice  /c abc /m "请输入" /d e /t 5
::用户选择的结果会按项目序号数字(从1开始)返回在errorlevel变量中
if %errorlevel%==1 echo 你选择了a
if %errorlevel%==2 echo 你选择了b
if %errorlevel%==3 echo 你选择了c
pause
If

if 表示将判断是否符合规定的条件,从而决定执行不同的命令。
有三种格式:

  1. if “参数” == “字符串” 待执行的命令
    参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
if "%1"=="a" format a:
if { %1 }=={ } goto noparms
if { %2 }=={ } goto noparms
  1. if exist 文件名 待执行的命令
    如果有指定的文件,则条件成立,运行命令,否则运行下一句
if exist config.sys edit config.sys
  1. if errorlevel / if not errorlevel 数字 待执行的命令
    如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。

    DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。

if errorlevel 2 goto x2
for

FOR这条命令基本上都被用来处理文本。
在cmd窗口中使用格式:

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

在批处理脚本中使用格式:

FOR %%variable IN (set) DO command [command-parameters]
  1. 在cmd窗口中使用,变量名必须用单%引用(即:%variable);在批处理脚本中使用,变量名必须用双%引用(即:%%variable)。
  2. for、in和do是for命令的三个关键字,缺一不可。
  3. 关键字in之后,do之前的括号不能省略。

举例:

@echo off
for %%i in (1 2 3 4 5) do @echo %%i
pause>nul
  • 参数:FOR有4个参数 /d /l /r /f
  • %%变量名 :这个变量名可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他;
  • IN:命令的格式;
  • (相关文件或命令) :FOR要把什么东西读取然后赋值给变量;
  • do:命令的格式;
  • 执行的命令:对每个变量的值要执行什么操作就写在这

for /d
/d ,完整的含义是 /directory,即为了处理文件夹。完整语句应该是这样的:

for /d %variable in (元素集合) do command [command-parameters]
  1. 有通配符。

当“元素集合”中包含有通配符 ? 或 * 时,它会匹配文件夹。但是,相比 for /r 而言,这个时候的for /d,其作用就小得可怜了。

它仅能匹配当前目录下的第一级文件夹,或是指定目录位置上的一级文件夹,而不能匹配更深路径下的子文件夹。

举例:

@echo off 
for /d %%i in (f:\test*) do echo %%i
pause>nul

这样的语句,会匹配到形如:f:\test、f:\test1、f:\test2 等之类的文件夹,若不存在这样的文件夹,将不会有任何回显。

  1. 无通配符

当“元素集合”中不包含任何的通配符时,它的作用和 “for %%i in (元素集合) do 命令语句集合” 这样的语句无任何区别。因此,for /d 的角色就变得很微妙。

  1. for /r /d一起使用

举例:

@echo off
for /r /d %%i in (*) do echo %%i
pause>nul

效果:显示当前目录下所有的文件夹(包括子文件夹);等价于 “dir /ad /s /b”。

for /l
for /l l是指loop,即循环的意思。for语句本身就是一种“循环”。

for /l 语句的完整格式:
for /l %variable in (start,step,end) do command [command-parameters]

  1. start指起始值;step指步间距;end指终止值。
  2. start、step和end都只能取整数(正负皆可)。
  3. 步间距step的值不能为0。
  4. 当步间距step的值为正整数时,终止值end不能小于初始值start。
  5. 当步间距step的值为负整数时,终止值end不能大于初始值start。

具体含义:从start开始计数,以step为步长,直至最接近end的那个整数值为止,这之间有多少个数,do后的语句就执行多少次。

举例:

@echo off
for /l %%i in (1,2,10) do echo %%i
pause>nul
for /l %%i in (-1,-2,-10) do echo %%i
pause>nul

一般而言,for /l语句可以换成goto循环,但是,goto循环并不一定能被 for /l 语句替换掉。
for /l与goto选择:

  1. 当循环次数确定的时候,首选for /l语句,也可使用goto语句但不推荐;
  2. 当循环次数不确定的时候,用goto语句将是唯一的选择,因为,这个时候需要用if之类的条件语句来判断何时结束goto跳转。

for /r
for /r 语句的完整格式:
for /r [[drive:]path] %%variable in (set) do command [command-parameters]

按照帮助信息里翻译得四不像的说法,for /r 的作用是“递归”,我们换一个通俗一点的,叫“遍历文件夹”。

更详细的解释:像下面的语句中,如果“元素集合”中只是一个点号,那么,这条语句的作用就是:列举“目录”及其之下的所有子目录,对这些文件夹都执行“命令语句集合”中的命令语句。其作用与嵌套进 for /f 复合语句的 “dir /ad /b /s 路径” 功能类似。如果省略了“目录”,将在当前目录下执行前面描述的操作。

那么,再具体一点,for /r具体的语句完整格式为:
for /r 目录 %%i in (元素集合) do 命令语句集合

举例:新建文本文件,命名为for3.1,修改文件类型为bat:

@echo off 
for /r f:\test %%i in (.) do echo %%i 
pause>nul

for /f
for /f常用来提取文本信息,如:读取文件内容;提取某几行字符;截取某个字符片段;对提取到的内容再切分、打乱、杂糅……

举例:新建一个文本文件test.txt,加入内容。

@echo off 
for /f %%i in (test.txt) do echo %%i
pause>nul

在这段代码中,虽然执行结果是把test.txt中的所有内容都显示出来了,貌似 for /f 语句是把整个test.txt内容一次性显示到屏幕上,实际上并非如此。
无论for语句做何种变化,它的执行过程仍然遵循基本的for流程:依次处理每个元素,直到所有的元素都被处理为止。只不过在for /f语句中,这里的元素是指文件中的每一行,也就是说,for /f 语句是以行为单位处理文本文件的,这是一条极为重要的规则。

title

BAT的标题

cls

清除屏幕

设置字体颜色和窗体大小
  1. 设置字体颜色
    COLOR 02 (0代表背景色,2代表前景色)

    常用的颜色有以下值:0 黑色,1蓝色,2 绿色,3 浅绿色,4红色,5紫色,6黄色,7白色,8灰色,9浅蓝,A浅绿,B浅蓝色,C浅红色,D浅紫色,E浅黄色,F亮白色)。

  2. 设置窗体大小
    MODE CON: COLS=宽度 LINES=高度

网络命令
  1. ping
  2. ipconfig
  3. arp
系统相关
  1. net user 显示计算机用户
  2. tasklist 显示进程列表
输出文件内容

type 用来输出文件内容的文件

type subfor.bat
定义变量

set 变量名称=变量值。如set x=1

字符串处理
  1. 字符串拼接
    语法:newStr=%str1%%str2%

  2. 字符串截取
    语法:%var:~x,y% (x,y∈Z)
    当x为正数时表示从左到右第x+1位开始截取,当x为负数时表示从右到左第x位开始截取(右一位是-1)
    当省略x时采用默认值0;

    当y为正数时表示截取的长度,当y为负数时表示截取到从右到左的第y+1位,当省略y时采用默认值-1。

set src=abc  123 456
set trunk=%src:~2,4%
echo %trunk%
echo %src:~-5,4%
  1. 字符串替换
    语法:%var:str1=str2%
    说明:将字符串var中所有的str1替换为str2
    echo %src:123=789%

    替换功能也可以用于完成删除操作,只需要替换为空就行了。
    删除字符串里的空格
    set str5=abc 123 4 5 6 7 8
    echo %str5: =%

参考文章:
Windows BAT批处理命令详解
windows批处理(cmd/bat)编程详解

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Windows中,可以使用VBScript引擎或PowerShell引擎实现正则表达式的功能。以下是一个使用VBScript引擎的Bat脚本示例: ```bat @echo off setlocal EnableDelayedExpansion set string=version 1.0.988 is the latest release rem 定义VBScript脚本 set vbs=" Set objRegExp = New RegExp objRegExp.Pattern = ""1\.0\.988"" objRegExp.Global = True strResult = objRegExp.Replace("%string%", ""2.0.1"") WScript.Echo strResult " rem 使用VBScript引擎执行脚本 for /f "delims=" %%i in ('cscript //nologo //e:vbscript "%vbs%"') do set "new_string=%%i" echo %new_string% endlocal ``` 在这个示例中,我们使用VBScript引擎定义了一个正则表达式,并使用Replace()函数将匹配到的字符串"1.0.988"替换成了"2.0.1"。最后,使用Bat脚本的for /f命令将VBScript脚本的输出赋值给变量new_string,从而实现了在Bat脚本中使用正则表达式的功能。 另外,如果你使用Windows 10及以上版本,也可以使用PowerShell引擎实现正则表达式的功能。以下是一个使用PowerShell引擎的Bat脚本示例: ```bat @echo off setlocal EnableDelayedExpansion set string=version 1.0.988 is the latest release rem 定义PowerShell脚本 set ps1=" [string]$string = '%string%' $new_string = $string -replace '1\.0\.988', '2.0.1' Write-Output $new_string " rem 使用PowerShell引擎执行脚本 for /f "delims=" %%i in ('powershell -noprofile -noninteractive -command "& {%ps1%}"') do set "new_string=%%i" echo %new_string% endlocal ``` 在这个示例中,我们使用PowerShell引擎定义了一个正则表达式,并使用-replace运算符将匹配到的字符串"1.0.988"替换成了"2.0.1"。最后,使用Bat脚本的for /f命令将PowerShell脚本的输出赋值给变量new_string,从而实现了在Bat脚本中使用正则表达式的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值