bat 批示处理详解-1

  • 一: bat 文件理解
    • 1> 理解
    • 2> 批处理运行命令机制
  • 二: dos命令整理
    • 1> dos命令 help /commadn /? -查询帮助
    • 2> dos命令使用查询
      • 1. 传参命令--COLOR -H
      • 2. 查询指令 SYSTEMINFO
      • 3. DOS窗口的编码格式
  • 三: bat 语法介绍
    • 1> 辅助命令
      • 1. 符号&转义&组合
        • 符号-“”、%、:, ; () !
        • 转义\换行
        • 组合
      • 2. echo 回显
      • 3. pause
      • 4. 句柄
    • 2> 文件处理命令
      • 1. 文件处理
        • ren 重命名
        • move 移动
        • del 删除
      • 2. 文件调用及区别call&start& goto
    • 3> 执行语句命令
      • 1. if else& if& if exist
      • 2. if errorlevel number
      • 3. for 循环
        • /L
        • /d
        • /r
        • /F
      • 4. continue 和 break
    • 4> 其他相关常用命令
      • 1. 路径相关
      • 2. 传参相关
      • 3,字符串处理
        • A: 分割
        • B: 替换
        • C:拼接
        • D: 计算长度
        • E: 截取字符,传递参数
      • 4. set 命令
        • A: set 赋值
        • B: set /p 读取输入
        • C: set /a 数学运算
        • D: set 字符截取& 替换
        • E: set 赋值变量
        • F: set 字符开头变量
      • 5. ping 命令
      • 6. shutdown命令
      • 7. choice 命令
  • 四:题外话
    • 1> call 文件的相互传参
    • 2> setlocal enabledelayedexpansion 含义
    • 3> bat 批示处理详解-2

一: bat 文件理解

1> 理解

windows下BAT批处理的工作原理就是一次处理多条DOS命令,其效果和在DOS下依次执行各条命令相同;BAT文件其实就是文本文件,用任意文本编辑器均可打开。

windows下借助bat文件,相对于–Linux下借助shell脚本可以完成很多操作步骤繁琐但操作次序相同,且整个过程需要重复执行多次的情况

2> 批处理运行命令机制

批处理读取命令时是按行读取,在处理之前要完成必要的预处理工作;在其中包含该命令中的变量赋值;

应用场景:'交换'两个变量的值,但是'不使用临时'变量set var1=abcset var2=123set var1=%var2%& set var2=%var1%原因:先做'预处理'-->'变量值'替换

错误语法:

set a=123 & echo %a% # 命令是按行读取,此处还未对a做处理,所以此处是有错误的

为了解决这类问题,设置变量延迟
作用:在读取完成一行语句后,不立即对该行的变量进行赋值,而是会对某单条语句执行后,在进行赋值,这也是延迟变量赋值作用;

setlocal enabledelayedexpansion
启动了变量延迟效果:告知'批处理'动态'感知'变化-->即'先不给'该行变量赋值,而是在'运行过程中'给变量'赋值' -->'顺序'

解读:%variable%‘不能感知’变量的’变化’

@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,3,10) do (
set a=%%i  # 此处不能使用 %a%
echo !a!
)pause

二: dos命令整理

1> dos命令 help /commadn /? -查询帮助

cmd界面直接输入---》help  如下命令
常用命令 含义
CD 显示当前目录的名称或将其更改。
CHDIR 显示当前目录的名称或将其更改。
BREAK 设置或清除扩展式 CTRL+C 检查。
DATE 显示或设置日期
DIR 显示一个目录中的文件和子目录
ECHO 显示消息,或将命令回显打开或关闭
EXIT 退出 CMD.EXE 程序(命令解释程序)
FIND 在一个或多个文件中搜索一个文本字符串。
FINDSTR 在多个文件中搜索字符串。
HELP 提供 Windows 命令的帮助信息。
PATH 为可执行文件显示或设置搜索路径。
PAUSE 暂停批处理文件的处理并显示消息。
ENDLOCAL 结束批文件中环境更改的本地化。
TIME 显示或设置系统时间。
CLS 清除屏幕
SYSTEMINFO 显示计算机的特定属性和配置。
COLOR 设置默认控制台前景和背景颜色。
文件或目录命令 含义
COPY 将至少一个文件复制到另一个位置。
MD 创建一个目录。
RD 删除目录。
MKDIR 创建一个目录。
MKLINK 创建符号链接和硬链接
MODE 配置系统设备。
MORE 逐屏显示输出。
MOVE 将一个或多个文件从一个目录移动到另一个目录。
COMP 比较两个或两套文件的内容
OPENFILES 显示远程用户为了文件共享而打开的文件。
DEL 删除至少一个文件。
ERASE 删除一个或多个文件。
FC 比较两个文件或两个文件集并显示 它们之间的不同。
RECOVER 从损坏的或有缺陷的磁盘中恢复可读信息。
REN 重命名文件。
RENAME 重命名文件。
REPLACE 替换文件。
RMDIR 删除目录。
ROBOCOPY 复制文件和目录树的高级实用工具
dos命令语句 含义
CALL 从另一个批处理程序调用这一个。
IF 在批处理程序中执行有条件的处理操作。
SET 显示、设置或删除 Windows 环境变量。
SORT 对输入排序。
FOR 为一组文件中的每个文件运行一个指定的命令。
GOTO 将 Windows 命令解释程序定向到批处理程序中某个带标签的行。
SETLOCAL 开始本地化批处理文件中的环境更改。
START 启动单独的窗口以运行指定的程序或命令。
TASKLIST 显示包括服务在内的所有当前运行的任务。
TASKKILL 中止或停止正在运行的进程或应用程序。
TYPE 显示文本文件的内容。
PRINT 打印一个文本文件。
其他命令 含义
TITLE 设置 CMD.EXE 会话的窗口标题。
TREE 以图形方式显示驱动程序或路径的目录结构。
VER 显示 Windows 的版本。
CHCP 显示或设置活动代码页数。
CHKDSK 检查磁盘并显示状态报告。
ASSOC 显示或修改文件扩展名关联。
CHKNTFS 显示或修改启动时间磁盘检查。
ATTRIB 显示或更改文件属性。
CMD 打开另一个 Windows 命令解释程序窗口。
BCDEDIT 设置启动数据库中的属性以控制启动加载。
CACLS 显示或修改文件的访问控制列表(ACL)。
COMPACT 显示或更改 NTFS 分区上文件的压缩。
CONVERT 将 FAT 卷转换成 NTFS。你不能转换当前驱动器。
DISKPART 显示或配置磁盘分区属性。
DOSKEY 编辑命令行、撤回 Windows 命令并创建宏。
DRIVERQUERY 显示当前设备驱动程序状态和属性。
FSUTIL 显示或配置文件系统属性。
FTYPE 显示或修改在文件扩展名关联中使用的文件类型。
FORMAT 格式化磁盘,以便用于 Windows。
GPRESULT 显示计算机或用户的组策略信息。
GRAFTABL 使 Windows 在图形模式下显示扩展字符集。
LABEL 创建、更改或删除磁盘的卷标。
ICACLS 显示、修改、备份或还原文件和目录的 ACL。
POPD 还原通过 PUSHD 保存的当前目录的上一个值。
SCHTASKS 安排在一台计算机上运行命令和程序。
SHIFT 调整批处理文件中可替换参数的位置。
SHUTDOWN 允许通过本地或远程方式正确关闭计算机。
PROMPT 更改 Windows 命令提示。
PUSHD 保存当前目录,然后对其进行更改。
SC 显示或配置服务(后台进程)。
SUBST 将路径与驱动器号关联。
VERIFY 告诉 Windows 是否进行验证,以确保文件正确写入磁盘。
VOL 显示磁盘卷标和序列号。
XCOPY 复制文件和目录树。
WMIC 在交互式命令 shell 中显示 WMI 信息。
REM 记录批处理文件或 CONFIG.SYS 中的注释(批注)。

2> dos命令使用查询

dos_command -help(-h)

1. 传参命令–COLOR -H

设置默认的控制台前景和背景颜色。COLOR [attr]attr        指定控制台输出的颜色属性。颜色属性由两个十六进制数字指定 -- 第一个
对应于背景,第二个对应于前景。每个数字
可以为以下任何值:0 = 黑色       8 = 灰色1 = 蓝色       9 = 淡蓝色2 = 绿色       A = 淡绿色3 = 浅绿色     B = 淡浅绿色4 = 红色       C = 淡红色5 = 紫色       D = 淡紫色6 = 黄色       E = 淡黄色7 = 白色       F = 亮白色如果没有给定任何参数,此命令会将颜色还原到 CMD.EXE 启动时
的颜色。这个值来自当前控制台
窗口、/T 命令行开关或 DefaultColor 注册表
值。如果尝试使用相同的
前景和背景颜色来执行COLOR 命令,COLOR 命令会将 ERRORLEVEL 设置为 1。示例: "COLOR fc" 在亮白色上产生淡红色

DEMO

COLOR 72#  背景7 = 白色, 字体 2 = 绿色

2. 查询指令 SYSTEMINFO

C:\Users\CHH_PC>SYSTEMINFO
主机名:           DESKTOP-T164P4E
OS 名称:          Microsoft Windows 10 专业版
OS 版本:          10.0.19044 暂缺 Build 19044
OS 制造商:        Microsoft Corporation
OS 配置:          独立工作站
OS 构建类型:      Multiprocessor Free
注册的所有人:     CHH_PC
注册的组织:       暂缺
产品 ID:          00331-20020-00000-AA583
初始安装日期:     2022/4/15, 20:25:43
系统启动时间:     2022/6/25, 0:02:32
系统制造商:       Dell Inc.
系统型号:         Inspiron 7472
系统类型:         x64-based PC
处理器:           安装了 1 个处理器。[01]: Intel64 Family 6 Model 142 Stepping 10 GenuineIntel ~1600 Mhz

3. DOS窗口的编码格式

936 是微软为中国区设置的编码格式,当然,我们也可以对编码格式进行修改
chcp 编码格式代码
#这种只是临时的进行修改当前文件的编码格式,当这个DOS窗口关闭后又将恢复到原来的编码格式
代码 编码格式
950 繁体中文
65001 UTF-8
936 简体中文默认的GBK
437 MS-DOS 美国英语
1253 希腊语
1258 越南语
1256 阿拉伯语

三: bat 语法介绍

1> 辅助命令

1. 符号&转义&组合

符号-“”、%、:, ; () !

:冒号
** : : 开头为单个冒号;被视作标号,而直接忽略后面所有的内容;
有效标号: 冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别;
无效标号:冒号后紧跟一个非字母数字开头的字符串,goto语句无法识别;可以起到注释左右;即作为习惯 ** :: ** 常被用做注释符号,其实后面一个 ** : ** 可以替换成任意字符也能起到注释效果,如:
:+** 、 :* …
REM:‘注释命令’,一般用来给程序’加上注解’,该命令后的内容’不被执行, 但’能回显;
%注释内容% :用于行内注释,极少用,慎用;

注释 区别
:: 不可回显,被视作无效命令
REM或rem 不被执行,能回显,可用于config.sys文件

“”: 双引号: 允许在字符串中出现空格;
%:百分号

涉及:%、%%vaeiable-->"for循环中(接受变量)"、%variable%-->"echo中引用变量"备注:!variable! -->是对'%variable%'的增强
符号 功能
% 批处理变量引导符号
%var% 引用变量
%0、—%9 0为批量本身,1-9为传参;例如:copy %0 /sys/
行内注释 %注释内容%-但不能出现重定向等符号

, 逗号
逗号相当于空格,在某些情况下“,”可以用来当做空格使
dir,c:\ 或者传参 12,23

; 分号
分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行。
dir c:\;d:\;e:\;z:\ 等同于
dir c:\
dir d:\ …
() 括号
小括号在批处理编程中有特殊的作用,左右括号必须成对使用,括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行。
在for语句和if语句中常见,用来嵌套使用循环或条件语句,其实括号()也可以单独使用;
demo

命令:echo 1 echo 2 & echo 3
可以写成:
(
echo 1
echo 2
echo 3
)

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

转义\换行

符号 功能
^开头 对特殊符号’<、>、&'的前导字符,在命令中他将’以上3个符号’的’特殊’功能去掉,仅仅只把他们’当成符号’而’不使用’他们的特殊意义
^末尾 在语句末尾起到换行作用

组合

&、&&、||:把多条命令组合起来成一条命令执行
语法: 第一条命令 & 第二条命令 & 第三条命令 [&…]

符号 功能
& 把多条命令顺序执行,中间有语句错误,不影响下一句语句执行,无条件执行&符号后面的命令
&& 当&&前面的命令成功执行时,执行&&后面的命令,否则不执行
双管道符 当前面的命令失败时,执行符号后面的命令,否则不执行

优先级别

'|' 大于 '>、>>' 大于 '||、&&'
# 管道命令优先高于重定向命令,重定向命令优先高于组合命令;

2. echo 回显

备注: echo 后面的字符串’不需要加’双引号–>否则也会’写入文件’中 -->区别Linux
关闭回显:是指’运行批处理文件’时,‘不显示’文件里的’每条命令’,只显示’运行结果’;
@echo off #从’本行开始’关闭回显 ----一般批处理’第一行’都是这个

C:\Users\CHH_PC>echo /?
显示消息,或者启用或关闭命令回显。ECHO [ON | OFF]ECHO [message]若要显示当前回显设置,请键入不带参数的 ECHO。
==========================================
echo off  :显示执行的路径,不显示执行命令,直接显示内容
echo on:显示执行的路径,显示执行命令并显示内容,
@echo off : 不显示执行的路径,不显示执行命令,直接显示内容

用法:
A:echo 配合@ \off\on 关闭打开回显
B:echo 后面跟空格加字符,回显字符串信息作用;
C: echo紧跟 .|,管道符后可以跟命令用来回显;

C:\Users\CHH_PC>echo.|time
当前时间: 22:35:19.42
输入新时间:

bat内容

@echo off
echo.|SYSTEMINFO
pause

D: echo 生成文件并写入信息;

echo a test file. >1.txt # 此处生成文件并写入内容,且a test file.  后有个空格;
echo a test file.>1.txt# 此处生成文件并写入内容,且a test file.  后无空格;因为 **file.>1** ,连接处无空格;
echo a test file.>>1.txt# 此处生成文件并写入内容或者对文件内容后面追加内容;

E:echo 使电脑发出声音用来提示;

声音 命令
蜂鸣 echo pause>nul

3. pause

运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue…的提示,等待用户按任意键后继续;

4. 句柄

句柄:代码中智能指针;

内容 含义
‘>&’ 将一个句柄内容输出写入到另一个句柄输入
'<& ’ 将一个句柄读取输入写入到另一个句柄输出中
常用句柄 含义
总述 常用句柄定义0,1,2,其中3-9未定;stdin可以被<重定向,stdout可以被 > ,>> 重定向;
1>nul 禁止输出正确信息;1,2代表某数据流入流出的地址,
2>nul 禁止输出错误信息;1,2代表某数据流入流出的地址,
0 标准输入stdin,键盘输入
1 标准输出stdout,输出到命令提示符窗口conole
2 标准错误输出stderr,输出到命令提示符窗口conole

2> 文件处理命令

1. 文件处理

ren 重命名

ren 1.png 2.png # first_file   target_file

move 移动

move file_pat target_path

del 删除

删除一个或多个文件。DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] namesnames         指定一个或多个文件或者目录列表。通配符可用来删除多个文件。如果指定了一个目录,该目录中的所有文件都会被删除。/P            删除每一个文件之前提示确认。/F            强制删除只读文件。/S            删除所有子目录中的指定的文件。/Q            安静模式。删除全局通配符时,不要求确认/A            根据属性选择要删除的文件属性          R  只读文件            S  系统文件H  隐藏文件            A  准备存档的文件I  无内容索引文件      L  重新分析点O  脱机文件            -  表示“否”的前缀如果命令扩展被启用,DEL 和 ERASE 更改如下:/S 开关的显示句法会颠倒,即只显示已经
删除的文件,而不显示找不到的文件。

2. 文件调用及区别call&start& goto

直接调用,在文本中直接调用文件名;例如:@echo off 2.png ,可以直接打开图片
call 调用另一个批处理文件或可执行程序

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

start 调用;调用外部程序,所有的 DOS命令 和 命令行程序 都可以由 start命令 来调用

常用参数:
MIN :开始时窗口最小化
SEPARATE :在分开的空间内开始 16 位 Windows 程序
HIGH: 在 HIGH 优先级类别开始应用程序
REALTIME :在 REALTIME 优先级类别开始应用程序
WAIT :启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数================================
Sample:start /MIN test2.bat arg1 arg2 (调用同目录下的 test2.bat,且输入2个参数给他,且本窗口最小化)

goto label: —:label
区别:其中主要是直接调用与call区别,其他只是跳转

命令 区别
直接调用 可以调用别的批处理文件,但是这样调用的批处理文件执行结束后不会回到原来的批处理文件
call 调用另一个批处理文件或可执行程序,并不终止原来的文件;主要来进行批处理的内部调用,当然也可以调用可执行程序,
start 可以调用别的批处理文件 &文件&可执行文件;执行结束后不会回到原来的批处理文件;而start 不能进行内部调用,但是其可以执行几乎所有的外部程序。call 是在当前窗体进行调用一个子进程,变量可以互通,但是start 调用外部程序是相当于是新开一个进程。call 可以将参数传入子进程,子进程也可以将值返回,但是start 只能进行传参,但是不能返回参数或者变量
goto 其后可以直接调用,但主要运用在循环中的跳转;goto label: 跳转到指定标签行,然后从" : label " 的下一行开始处理命令 ,goto 语句经常和 if 连起来用label 的名字可以随意取,goto 是根据 " : " 找到该标签的,不要忘记了 冒号。

demo

@echo offecho goto
goto test1:
:test1  # 直接跳转在这里,可以放在循环中跳转
start test1.bat
pause

3> 执行语句命令

1. if else& if& if exist

if 表示将判断是否符合规定的条件,从而决定执行不同的命令;
语法:
DOS命令里并没有 != 这种写法,但是提供了 not 关键词,也是条件取反的意思

if 条件(成立时执行的命令) else (不成立时执行的命令)
::执行的语句建议都写在 "()" 里。
当else换行时候;if 语句的末尾使用 " ^ " 符号将语句进行连接,否则会报错if 条件(成立时执行的命令)^else (不成立时执行的命令)

demo

@echo off
if exist test1.bat (test1.bat)^
else (echo "the file not exist")
::当存在second.bat 时就执行这个批处理文件 否则打印"the file not exist"
pause
这里是可执行文件在同级目录下,可以添加相对路径也可以放对决路径;
test1.bat 等文件可以被执行,2.png 像图片之类的可以被直接打开;

如果是多个条件,建议适当使用括号把各条件包起来;

 if 1 == 0 ( echo comment1 ) else if 1==0 ( echo comment2 ) else (echo comment3 )

2. if errorlevel number

执行返回值 ,返回的是数字;一般DOS程序会在执行结束后返回一个数字来代表程序运行的结果,称为错误码 errorlevel 或者返回码,有点返回值那味了是不
常见的返回码为 : 0 1

errorlevel 0 成功 errorlevel 1 失败

@echo off
if exist 2.png (2.png)^
else (echo "the file not exist")
::当存在second.bat 时就执行这个批处理文件 否则打印"the file not exist"
if errorlevel 0 (echo operate sucess) else (echo not sucess)
pause
=====================
operate sucess
请按任意键继续. . .

3. for 循环

for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令;

基本命令:
FOR %%variable IN (set) DO command [command-parameters]
FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令

参数 含义
%%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。

参数: FOR有4个参数 /d /l /r /f

参数 含义
/l 含开关/L的for语句,可以根据set里面的设置进行循环,从而实现对循环次数的直接控制
/d 表示仅为目录 , 它只能显示当前目录下的目录名字;如果集里面包含通配符,则指定与目录名匹配,而不与文件名匹配
/r /R参数之后还可带盘符及路径;
/f 含开关/F的for语句具有最强大的功能,它能够对字符串进行操作,也能够对命令的返回值进行操作,还可以访问硬盘上的ASCII码文件,比如txt文档等

/L

命令:
FOR /L %%variable IN (start,step,end) DO command
其中,start为开始计数的初始值,step为每次递增的值,end为结束值。当end小于start时,step需要设置为负数

for /L %%i in (0,5,100) do (echo %%i& md %%i& mkdir %%i\test)
==============================
循环从0,递增5,直至到达100;同时显示数字,新建文件夹并且在文件夹下新建test文件

求和

@echo offset /a sum=0
for /l %%i in (1,1,100) do set /a sum=sum+%%i
echo %sum%
pause
================================
5050
请按任意键继续. . .

/d

命令:
FOR /D %variable IN (set) DO command [command-parameters]

@echo offecho  %cd%  "current directory path"
d:
for /D %%a in (*A*) do echo %%a   >> %~dp0\wordin_dirname.txt    pause
如果这里不切换到,D盘的话,/d只闲显示脚本路径下的文件下信息,写到txt文件中;

/r

FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]
/r 后无路径:对脚本所在路径遍历
/r 后跟路径:对跟的指定路径遍历
含开关/R的命令有时候被用于通过遍历文件夹来查找某一个文件或文件夹

@echo offecho  %cd%  "current directory path"
path=d:
for /r %path%  %%i in (*.txt) do echo %%i >>  %~dp0\file_endswith.txt
pause
==============================
指定path 下的 以.txt 结尾的文件 追加写在   脚本路径下file_endswith.txt      文件中;
D:\FilesPath3.txt
D:\360\360Safe\deepscan\QVM\model_360nb\update.txt
D:\360RecycleBin\!此文件夹为使用360清理后的垃圾备份文件.txt
D:\360RecycleBin\1\1738c7987314ed4166ffc1383a0e4f59.txt
D:\360RecycleBin\1\f006782cc4d3ebd69dda70eef55d39d0.txt
D:\360RecycleBin\104\7119dfac6242b7776fdd80dd7e0cd986.txt
........

/F

命令:
FOR /F [“options”] %%variable IN (set) DO command
其中,set为(“string”、‘command’、file-set)中的一个;options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一个或多个的组合。一般情况下,使用较多的是skip、tokens、delims三个选项;

选项 含义
skip=n 从文本开始忽略n行
delims 指定定界符
tokens 提取列。 通俗讲,共同提取每一行的第m小节的内容。因此,可以用该命令来指定提取文本信息。

tokens 讲解

tokens组合 含义
tokens= 提取全部。
tokens=m 提取第m列。
tokens=m,n 提取第m列和第n列。
tokens=m-n 提取第m列至第n列。
tokens=* 删除每行前面的空格。忽略行首的所有空格。
tokens=m* 提取第m列以后的所有字符,星号表示剩余的字符。
tokens=m,* 提取第m列以后的所有字符,星号表示剩余的字符。

输出变量的个数由定义了的tokens决定。

demo
对日志符号替换

@echo off
Date
For /f "tokens=1-3 delims=-/. " %%j In ('Date /T') do echo %%j year %%k month %%l day
pause
===============================
#把1到3列 "/” 替换成 对应的
当前日期: 2022/07/17 周日
输入新日期: (年月日)
2022 year 07 month 17 day
请按任意键继续. . .

显示文档信息

for /f "delims=" %%a in (FilesPath3.txt) do echo.%%a # 显示文档内所有行信息;
for /f "delims=  skip=12"    %%a in (FilesPath3.txt) do echo.%%a# 从第12行开始显示

4. continue 和 break

利用 goto 实现程序中常用的 continue 和 break 命令
ontinue: 在 for 循环的最后一行写上一个标签,跳转到这位置即可

break: 在 for 循环的外面的下一句写上一个标签,跳转到这位置即可
demo

for /F ["options"] %variable IN (command) DO (... do command ...if ... goto continueif ... goto break... do command ...:continue):break

4> 其他相关常用命令

1. 路径相关

功能 命令 区别
当前盘符 %~d0
当前路径 %cd% 表示执行命令时所在的目录;可以改变的,因为它表示的是当前目录,如果在批处理中使用了cd命令就会改变他的值
当前执行命令行 %0
当前bat文件路径 %~dp0 表示批处理文件所在的目录;是在执行某个批处理结束之前是不会改变的,因为代表的是脚本文件在磁盘的位置
当前bat文件短路径 %~dp0

demo


echo      %~d0
echo      %cd%
echo       %0
echo     %~dp0
echo    %~dp0
cd /d %~dp0
pause
===================
C:                                                    当前盘符
C:\Users\CHH_PC\Desktop\test                          当前路径
"C:\Users\CHH_PC\Desktop\test\test.bat"               当前执行命令行
C:\Users\CHH_PC\Desktop\test\                         当前bat文件路径
C:\Users\CHH_PC\Desktop\test\                        当前bat文件短路径
请按任意键继续.

查询上级目录可以 cd 再看 %~dp0 信息,这些都会与dir 等命令配合使用;


@echo off
cd /d %~dp0
::显示当前路径
echo %cd%
cd ..
::显示上级目录路径
echo %cd%
pause

2. 传参相关

%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。

变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用 %1 到 %9 顺序表示。

Sample:

call test2.bat “hello” “haha” (执行同目录下的“test2.bat”文件,并输入两个参数)

在“test2.bat”文件里写:

echo %1 (打印: “hello”)

echo %2 (打印: “haha”)

echo %0 (打印: test2.bat)

echo %19 (打印: "hello"9)

3,字符串处理

A: 分割

%源字符串:~起始值,截取长度% (起始值从0开始;截取长度是可选的,如果省略逗号和截取长度,将会从起始值截取到结尾;

截取长度如果是负数,表示截取到倒数第几个。)

“%time%” 显示如:“11:04:23.03” (完整的时间"hh:mm:ss.tt")

“%time:~0,5%” 显示"hh:mm"(即"11:04"),其中0表示从右向左移位操作的个数,5表示从左向右移位操作的个数

“%time:~0,8%” 显示标准时间格式"hh:mm:ss"(即"11:04:23",前8个字符串)

"%time:~3,-3%“显示"mm:ss”(即从第4个开始,截去最后3个的字符串)

“%time:~3%” 显示"04:23.03"(即去掉前4个字符串)

“%time:~-3%” 显示".tt"(即最后3个字符串)

上面的字串分割格式,也可以用于其它地方,如目录路径:“%cd:~0,10%”

@echo off
echo %cd%
echo %cd:~0,5%
echo %cd:~0,8%
echo %cd:~3,-3%
echo %cd:~3%
echo %cd:~-3%
pause
=============
C:\Users\CHH_PC\Desktop\test
C:\Us
C:\Users
Users\CHH_PC\Desktop\t
Users\CHH_PC\Desktop\test
est
请按任意键继续. . .

B: 替换

@echo off
set a="C:\Users\CHH_PC\Desktop\test"
set path1=%a:\=&%
echo %path1%
pause
==================== # 替换\ 为& 符号
"C:&Users&CHH_PC&Desktop&test"
请按任意键继续. . .

C:拼接

由于没有直接的字符串合并函数,只能用笨方法

@echo off
set a=C:\Userst
set b=\CHH_PC\
set c=Desktop\
set d=test
set str1=%a%%b%%c%%d%
echo %str1%
pause
============
C:\Userst\CHH_PC\Desktop\test
请按任意键继续. . .

D: 计算长度

没有现成的函数。如下程序利用 goto形成循环,不断将字符串截短1,并记录截短的次数,到字符串变成空时的次数即长度;

@echo off
setlocal enabledelayedexpansion
if exist report.txt del report.txt
set line=0
for /f "tokens=* delims=" %%a in (new.txt) do (
set var=%%a
set /a line+=1
set num=0
call :loop
echo  !line!  >> report.txt
)
:loop
if not "!var!"=="" (
set /a num+=1
set var=!var:~1!
goto loop
) else (
goto :eof
)
pause
=======================1
.
.
. 15

E: 截取字符,传递参数

@echo off
set ifo=abcdefghijklmnopqrstuvwxyz0123456789
echo %ifo%
echo ==============================
echo first 5 char
echo %ifo:~0,5%
echo lastest  5 char
echo %ifo:~-5%
echo from first to lastest 5 char
echo %ifo:~0,-5%
echo from fourth  ,long 5
echo %ifo:~3,5%
echo from start at lastest 14 char ,long 5
echo %ifo:~-14,5%
pause
==========================abcdefghijklmnopqrstuvwxyz0123456789
==============================
first 5 char
abcde
lastest  5 char
56789
from first to lastest 5 char
abcdefghijklmnopqrstuvwxyz01234
from fourth  ,long 5
defgh
from start at lastest 14 char ,long 5
wxyz0
请按任意键继续. . .

4. set 命令

A: set 赋值

等号两边不要有空格
变量值包含特殊字符需用双引号
避免使用系统环境变量同名的自定义变量;如:path , date , errorlevel 等
语法可行但不推荐使用,set /a x=y=100;set /a x=1,y=2

@echo off
set str=%cd%
echo %str%
set "str1=Bat&Home"
echo " %str1%"
pause
===================
C:\Users\CHH_PC\Desktop\test
" Bat&Home"
请按任意键继续. . .

B: set /p 读取输入

交互获取用户输入
读取文件的内容

@echo off
set /p input=请输入一个字符串:
echo %input%
pause
============
@echo off
set /p input=<"new.txt"
echo %input%
pause

输出是否回车

@echo off
for %%i in (aas aa  zx aasc) do (
set /p =%%i
)
pause
================
aas
aa
zx
aasc
请按任意键继续. . .
@echo off
for %%i in (aas aa  zx aasc) do (
set /p =%%i<nul
)
pause
================
aasaazxaasc请按任意键继续. .

C: set /a 数学运算

等号右侧的变量可以省略百分号

@echo off
set x=99
set y=100
set /a n=%x%+%y% # 等价set /a n=x+y
echo %n%
pause
======================
199
请按任意键继续. .

八进制和十六进制转换成十进制

@echo off
set /a m=012
set /a n=0xA
echo %m% %n%
pause
==============
10 10
请按任意键继续. . .

BAT文件里面进行“取余”操作的时候需要使用两个百分号

@echo off
set /a m=10%%3
echo %m%
pause
=================
1
请按任意键继续. . .

逻辑运算的特殊字符需要使用双引号

@echo off
set /a "m=1<<10"
set /a n=1"<<"10
echo %m% %n%
pause

不支持直接计算超大数(例如磁盘空间的计算)
不支持直接计算浮点数

/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式
评估器很简单并以递减的优先权顺序支持下列操作:

表达 含义
() 分组
! ~ - 一元运算符
“* / %” 算数运算符
“+ -” 算数运算符
<< >> 二进制逻辑移位
- 二进制按位“与”
^ 二进制按位“异”
I 二进制按位“或”
= *= /= %= += -= 算数赋值
= ^= = <<= >>=
, 表达式分隔符

D: set 字符截取& 替换

set str=字符串 ,其方法和上面截取字符,传递参数 一致

E: set 赋值变量

F: set 字符开头变量

直接执行 set 命令可以显示系统环境变量
命令 set xxx 可以显示所有以 xxx 开头的变量
显示结果按照变量名进行排序


@echo off
set xxx1=A
set xxx3=C
set xxx2=B
set xxx
echo xxx
pause
==================
xxx1=A
xxx2=B
xxx3=C
xxx
请按任意键继续. .
@echo off
for %%i in (a b c d e f g ) do (
set #%%i=%%i
)
for /f "tokens=2 delims==" %%i in ('set #') do (
echo %%i
)
pause
======================
a
b
c
d
e
f
g
请按任意键继续. .

5. ping 命令

用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS][-r count] [-s count] [[-j host-list] | [-k host-list]][-w timeout] [-R] [-S srcaddr] [-c compartment] [-p][-4] [-6] target_name选项:-t             Ping 指定的主机,直到停止。若要查看统计信息并继续操作,请键入 Ctrl+Break;若要停止,请键入 Ctrl+C。-a             将地址解析为主机名。-n count       要发送的回显请求数。-l size        发送缓冲区大小。-f             在数据包中设置“不分段”标记(仅适用于 IPv4)。-i TTL         生存时间。-v TOS         服务类型(仅适用于 IPv4。该设置已被弃用,对 IP 标头中的服务类型字段没有任何影响)。-r count       记录计数跃点的路由(仅适用于 IPv4)。-s count       计数跃点的时间戳(仅适用于 IPv4)。-j host-list   与主机列表一起使用的松散源路由(仅适用于 IPv4)。-k host-list    与主机列表一起使用的严格源路由(仅适用于 IPv4)。-w timeout     等待每次回复的超时时间(毫秒)。-R             同样使用路由标头测试反向路由(仅适用于 IPv6)。根据 RFC 5095,已弃用此路由标头。如果使用此标头,某些系统可能丢弃回显请求。-S srcaddr     要使用的源地址。-c compartment 路由隔离舱标识符。-p             Ping Hyper-V 网络虚拟化提供程序地址。-4             强制使用 IPv4。-6             强制使用 IPv6。

demo

ping 192.168.16.108 -4 -t
=========================
来自 192.168.16.108 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.16.108 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.16.108 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.16.108 的回复: 字节=32 时间<1ms TTL=64192.168.16.108 的 Ping 统计信息:数据包: 已发送 = 6,已接收 = 6,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):最短 = 0ms,最长 = 0ms,平均 = 0ms
Control-C

6. shutdown命令

用法: shutdown [/i | /l | /s | /sg | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/fw] [/f][/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]]===============================/?         显示帮助。这与不键入任何选项是一样的。
/i         显示图形用户界面(GUI)。这必须是第一个选项。
/l         注销。这不能与 /m 或 /d 选项一起使用。
/s         关闭计算机。
/sg        关闭计算机。在下一次启动时,如果启用了自动重启登录,则将自动登录并锁定上次交互登录后,重启任何已注册的应用程序。
/r         完全关闭并重启计算机。
/g         完全关闭并重启计算机。重新启动系统后,如果启用了自动重启登录,则将自动登录并锁定上次交互用户。登录后,重启任何已注册的应用程序。
/a         中止系统关闭。这只能在超时期间使用。与 /fw 结合使用,以清除任何未完成的至固
/p         关闭本地计算机,没有超时或警告。可以与 /d 和 /f 选项一起使用。
/h         休眠本地计算机。可以与 /f 选项一起使用。
/hybrid    执行计算机关闭并进行准备以快速启动。必须与 /s 选项一起使用。
/fw        与关闭选项结合使用,使下次启动转到固件用户界面。
/e         记录计算机意外关闭的原因。
/o         转到高级启动选项菜单并重新启动计算机。必须与 /r 选项一起使用。
/m \\computer 指定目标计算机。
/t xxx     将关闭前的超时时间设置为 xxx 秒。有效范围是 0-315360000 (10 年),默认值为如果超时期限大于 0,则 /f 参数为/f 参数。
/c "comment" 注释重启或关闭的原因。最多允许 512 个字符。
/f         强制关闭正在运行的应用程序而不事先警告用当大于 0 的值为
,隐含 /f 参数               则默示为 /f 参数。
/d [p|u:]xx:yy  提供重新启动或关闭的原因。p 指示重启或关闭是计划内的。u 指示原因是用户定义的。如果未指定 p 和 u,则
启动或关闭               是计划外的。xx 是主要原因编号(小于 256 的正整数)。yy 是次要原因编号(小于 65536 的正整数)。

7. choice 命令

choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的 errorlevel,

然后配合 if errorlevel 选择运行不同的命令。

注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法。

choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。

使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……

Sample: choice /c:dme defrag,mem,end

将显示: defrag,mem,end[D,M,E]?

Sample:

choice /c:dme defrag,mem,end

if errorlevel 3 goto defrag (应先判断数值最高的错误码)

if errorlevel 2 goto mem

if errotlevel 1 goto end

四:题外话

1> call 文件的相互传参

test.bat

@echo off
setlocal enabledelayedexpansion
set  x=%1%
set  y=%2%
set /a M=%x%+%y%
echo %M%
echo call test1.bat %M%
call test1.bat %M%
pause

test1.bat

@echo off
set input=%1%
echo  it is test running  number %input%!
pause
输出:
C:\Users\CHH_PC\Desktop\test>test.bat 1,2
3
call test1.bat 3it is test running  number 3
请按任意键继续. . .
请按任意键继续. .

2> setlocal enabledelayedexpansion 含义

设置本地为延迟扩展。其实也就是:延迟变量,全称"延迟环境变量扩展",
在cmd执行命令前会对脚本进行预处理,其中有一个过程是变量识别过程,在这个过程中,如果有两个%括起来的如%value%类似这样的变量,就会对其进行识别,并且查找这个变量对应的值,再而将值替换掉这个变量,这个替换值的过程,就叫做变量扩展,然后再执行命令。

3> bat 批示处理详解-2

https://blog.csdn.net/weixin_42914706/article/details/125961200

bat 批示处理详解-1相关推荐

  1. windows批处理(cmd/bat脚本)编程详解

    cmd文件和bat文件的区别:二者本质上没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码也是共用的,只是cmd文件中允许使用的命令要比bat文件多.cmd文件只有 ...

  2. bat set命令详解

    例子: @echo off set var=我是值 echo %var% pause 请看 set var=我是值 ,这就是BAT直接在批处理中设置变量的方法! set 是命令 var是变量名 =号右 ...

  3. CMD命令之BAT脚本语法详解

    批量处理用DOS命令来处理文件,命令格式为.bat echo.@.call.pause.rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起. ==== 注 ===== ...

  4. Windows BAT批处理命令详解

    批处理可以说是windows下的shell,虽然没有shell强大吧,但也足以用来完成很多任务了.这里记录了大部分的批处理用法. 先说使用批处理要注意的几点: 尽量不要将批处理要操作的文件放在不同的盘 ...

  5. windows系统dos命令:cmd.exe运行的bat批处理命令详解

    DOS批处理 1.简单批处理命令 1.1echo:打开或关闭回显 echo off 关闭回显 ==>关闭之后不会显示一些不必要的信息. 后面所有的命令均不显示,但本条命令是显示的. @echo ...

  6. DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~)

    DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~) --- --- 前言: 虽然以前对批处理也算有点研究,但一直对for命令理解不够透彻,偶尔用时也是照猫画虎的用一下. 虽然 ...

  7. BAT批处理中的字符串处理详解(字符串截取)

    BAT批处理中的字符串处理详解(字符串截取 批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集.批处理中可实现的字符串处理功能有:截取字符串内容.替换字符串特定字段.合并字 ...

  8. 直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解

    JVM系列 直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势.及使用场景 直通BAT必考题系列:JVM的4种垃圾回收算法.垃圾回收机制与总结 直通BAT必考题系列:深入详解JVM内存模型与JVM ...

  9. 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置

    JVM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内存模型 2.JVM垃 ...

  10. 如何开启jvm日志_直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解...

    JVM系列 直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势.及使用场景 直通BAT必考题系列:JVM的4种垃圾回收算法.垃圾回收机制与总结 直通BAT必考题系列:深入详解JVM内存模型与JVM ...

最新文章

  1. 程序员能成为设计师吗
  2. 基于JDK 1.8 的 Java 容器UML图
  3. vs code golang代码自动补全
  4. C#正则表达式编程(三):Match类和Group类用法
  5. Python中os与sys两模块的区别
  6. 记一次从代码审计到拿下内网edr的过程
  7. HTML5中的时间类型,另外EL表达式的时间值来读取时间,并且还可以更改时间
  8. vivo Y66的usb调试模式在哪里,打开vivo Y66usb调试模式的流程
  9. java html类_java HTML
  10. python读取txt文件报错:UnicodeDecodeError: 'utf8' codec can't decode byte 0xb3 in position 0的解决方法
  11. Element el-input-number 计数器详解
  12. 应急响应--windows主机入侵排查思路
  13. Spring4 Spring MVC实战(一)——读《Spring in action》搭建最简单的MVC
  14. Elasticsearch:如何制作 GeoJSON 文件并进行地理位置搜索
  15. 企业微信防撤回插件 WeChatICU v1.0.1中文版
  16. 2020年8月程序员工资统计,平均14401元,下跌势头止住了
  17. SQL函数---SQL UCASE()
  18. zcmu--1931: wjw的剪纸(dfs+枚举)
  19. 继承QGraphicsObject自定义图元
  20. 性能测试面试题(测试框架总结)史上最全面试题

热门文章

  1. 工业界中NLP(自然语言处理)算法工程师的核心竞争力是什么?
  2. 描述 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。
  3. NoteExpress的使用方法
  4. 从程序员到CTO的Java技术路线图
  5. IDEA去掉SQL语句的黄色警告
  6. 输入一个十进制整数,分别输出其二进制、八进制、十六进制字符串
  7. ⑦企业级zabbix监控 微信报警、邮箱报警、钉钉报警、全网最细
  8. 项目5—中断控制LED下降沿有效与低电平触发
  9. 关于阿里云服务器租用费用的介绍
  10. 2020杭电多校第三场部分题解(1004, 1005, 1006, 1009)