bat常用命令

bat常用命令bat bat 命令

大家好,欢迎来到IT知识分享网。

定义

批处理文件(batch),对某对象进行批量的处理,是一种简化的脚本语言,应用于DOS和Windows系统中,扩展名为.bat或.cmd。复杂情况需使用if、for、goto等命令控制程序运行,利用系统本身提供的外部命令和第三方工具或软件。

  • DOS,Disk Operating System,磁盘操作系统,直接操作管理硬盘的文件。

分类

运行

自上而下逐行执行
%~dp0 d即drive,指磁盘,p即path,指路径
cd %~dp0 进入批处理文件所在目录
cd %~dp0bin\ 进入批处理文件所在目录的bin目录

系统变量%SystemRoot%\system32\cmd.exe的配置,使得在桌面的bat文件不用加cd %~dp0就可以直接运行(其他路径的有时不加也能执行?)
在这里插入图片描述

参数

系统参数

%SystemRoot% C:\WINDOWS
%windir%
%ProgramFiles% C:\Program Files
%OS% Windows_NT (系统)
%HOMEDRIVE% C: (系统盘)

传递参数%

%1-%9表示参数

adb shell

Linux

adb shell su -c " command "

Android

adb shell su 0 " command "

基本命令

cmd窗口执行help可查询所有命令

cmd窗口编码语言

taskkill终止进程

/?获取帮助

pause暂停运行

运行文件时,cmd窗口一闪而过不会保持,在最后加上pause,返回请按任意键后继续. . .或Press any key to continue. . .

@关闭当前命令行回显

REM注释行

也可以用英文双冒号::

errorlevel错误码

EQU 等于=
NEQ NEQ!=
LSS 小于<
LEQ 小于等于<=
GTR 大于 >
GEQ 大于等于>=

echo显示信息

相当于print(),显示消息,或者启用或关闭命令回显

echo 内容直接显示

echo off关闭后面代码的回显
在这里插入图片描述

@echo off关闭所有代码的回显
echo off也不显示

echo on开启回显功能
在这里插入图片描述

echo后加英文小数点.显示echo的on或off
在这里插入图片描述

中文乱码显示,首部chcp 65001
执行pause返回的请按任意键继续. . .变成了Press any key to continue . . .

写入txt文件

  • 重定向符>传递覆盖内容
    文件不存在则新建,存在则进行内容覆盖。可以直接写入中文,不用加chcp 65001,因为txt文件本身就是UTF-8编码(有的中文会出现乱码,原因不明,所以最好还是加上)
    在这里插入图片描述

  • 重定向符>>末尾追加内容
    文件不存在则新建,存在则进行内容追加
    在这里插入图片描述

^显示特殊字符
特殊字符前加^,仅当为符号显示
在这里插入图片描述

控制命令

if判断

执行批处理程序中的条件处理

IF [NOT] ERRORLEVEL number command # ERRORLEVEL number 如果最后运行的程序返回一个等于或大于指定数字的退出代码,指定条件为 true。 IF [NOT] string1==string2 command IF [NOT] EXIST filename command 

if,echo和if要在同一行,否则程序会在输入后直接退出

set /p pwd="请输入密码:" if %pwd%=="" echo 密码正确 if not %pwd%=="" echo 密码错误 

if-else,else子句必须出现在同一行的 IF 之后

IF EXIST filename. ( del filename. ) ELSE ( echo filename. missing. ) IF EXIST filename. (del filename.) ELSE echo filename. missing 

if-elseif-else

set /p score=输入成绩: if %score% lss 60 ( echo 不及格 ) else if %score% lss 70 ( echo 及格 ) else if %score% lss 80 ( echo 良 ) else if %score% lss 90 ( echo 优 ) else ( echo 棒呆 ) 

在这里插入图片描述

语句扩展

IF [/I] string1 compare-op string2 command # /I 开关(如果指定)说明要进行的字符串比较不分大小写。如果 string1 和 string2 都是由数字组成的,字符串会被转换成数字,进行数字比较。 IF CMDEXTVERSION number command # 作用跟 ERRORLEVEL 一样,除了它是在跟与命令扩展有关联的内部版本号比较。第一个版本是1。每次对命令扩展有相当大的增强时,版本号会增加一个。命令扩展被停用时,CMDEXTVERSION 条件不是真的。 IF DEFINED variable command # 如果没有名为 ERRORLEVEL 的环境变量,%ERRORLEVEL%会扩充为 ERROLEVEL 当前数值的字符串表达式;否则,你会得到其数值。 # 如果没有名为 CMDCMDLINE 的环境变量,%CMDCMDLINE%将在 CMD.EXE 进行任何处理前扩充为传递给 CMD.EXE 的原始命令行;否则,你会得到其数值 # 如果没有名为 CMDEXTVERSION 的环境变量,%CMDEXTVERSION% 会扩充为 CMDEXTVERSION 当前数值的字串符表达式;否则,你会得到其数值 
xcopy默认5个ERRORLEVEL
0 复制文件成功
1 未找到复制文件
2 用户通过CTRL C 终止了xcopy操作
4 出现了初始化错误
5 出现了磁盘写入错误

goto定向

chcp 65001 @echo off :write set /p input=请输入A或B: if "%input%"=="A" goto A if "%input%"=="B" goto B REM echo 请输入A或B: goto write goto EOF #多余了... :A echo 输入字母A goto EOF :B echo 输入字母B goto EOF :EOF pause 

goto语句和标签要相对应

  • 只有goto没有标签,运行会直接退出。如在窗口执行,会提示系统找不到指定的批处理标签,之后的命令不会执行
    在这里插入图片描述
  • 只有标签没有goto,文件可以正常执行,但不会实现跳转
    在这里插入图片描述
  • 需有退出语句终止程序向下执行
    可以用exit语句直接退出窗口
    在这里插入图片描述

  • 同名标签执行最上面的,若没有退出语句,就接着执行后面的标签
    bat常用命令” />

for循环

基础

对一组文件中的每一个文件执行某个特定命令

FOR %variable IN (set) DO command [command-parameters] # %variable,指定一个单一字母可替换的参数(可为任意字母,但不要设置为0~9) # (set),指定一个或一组文件。可以使用通配符 

在批处理程序中使用 FOR 命令时,指定变量请使用%%variable而不要用 %variable。变量名称是区分大小写的,所以%i不同于%I(程序中用%I,执行不了)
在这里插入图片描述
bat常用命令“>
在这里插入图片描述


for /D 语句扩展

指定与目录名匹配,而不与文件名匹配

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

在这里插入图片描述

for /R 语句扩展

检查以[drive:]path为根的目录树,指向每个目录中的 FOR 语句。如果在 /R 后没有指定目录规范,则使用当前目录。如果(set)仅为一个单点(.)字符,则枚举该目录树。

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] 
@echo off REM 当前目录下的所有文件,包括子目录 for /R %%i in (*) do echo %%i REM E盘下所有文件,包括子目录 for /R E:/ %%i in (.) do echo %%i REM E盘里所有扩展名为txt的文件 for /R E:/ %%i in (*.txt) do echo %%i pause 

循环的命令也可以通过()来换行,注意空格和缩进

# 实例:搜索 C 盘是否有 notepad.exe 。如果存在,则启动 notepad.exe 程序。 @echo off for /R C:/ %%i in (notepad.exe) do ( if exist %%i ( echo 找到了 notepad.exe REM 去启动 notepad.exe start %%i goto end ) ) echo 没有找到 notepad.exe :end 

for /L 语句扩展

以增量形式从开始到结束的一个数字序列

FOR /L %variable IN (start,step,end) DO command [command-parameters] # start:指定创建序列的开始位置 # step:for 语句创建序列时单步距离 # end:指定创建序列结束位置 

在这里插入图片描述

for /F 语句扩展

fileset 为一个或多个文件名。继续到 fileset 中的下一个文件之前,每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。“options” 参数指定解析操作。

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters] FOR /F ["options"] %variable IN ("string") DO command [command-parameters] FOR /F ["options"] %variable IN ('command') DO command [command-parameters] 
  • 默认解析,通过文件每行中分开的第一个空白符号来跳过空白行在这里插入图片描述
  • eol=c,指定字符开头的行为注释行
    在这里插入图片描述
  • skip=n,指定文件开始时忽略的行数
    在这里插入图片描述
  • delims=xxx,分隔符集,替换空格和制表符的默认分隔符集。允许指定一个或多个分隔符
    在这里插入图片描述

空格指定不能放在最前或之间,否则会报错,一定要放在最后
在这里插入图片描述
在这里插入图片描述

  • tokens=x,y,m-n, 提取列数
  • tokens=m 表示 取第m列;
  • tokens=m,n 表示提取第m列和第n列;
  • tokens=m-n 表示提取第m列至第n列;
  • tokens=* 忽略行首的所有空格;
  • tokens=m* 提取第m列以后的所有字符,星号表示剩余的字符;
# 把adb devices的返回结果都记录到result.txt中 for /f "tokens=*" %%a in ('adb devices') do echo %%a >> result.txt 

https://www.hxstrive.com/subject/windows_bat/72.htm

  • usebackq,改变解析方式

处理有空格的文件名" "
带空格的文件名,用双引号将文件名括起来。需要使用 usebackq 选项,否则,双引号会被理解成定义字符串的
在这里插入图片描述

处理文本字符串' '
用单引号将括号之间的 file-set 括起来,字符串会被当作文件中的单一输入行进行解析
在这里插入图片描述

chcp 65001 @echo off REM 解析失败 for /F "usebackq tokens=1-3" %%a in ("张三|28|87") do echo %%a REM 解析成功 for /F "usebackq tokens=1-3" %%a in ('张三 28 87') do ( echo %%a echo %%b echo %%c ) pause 

处理 CMD 命令(``)
将括号之间的 file-set 变成一个反括字符串。该字符串会被当作命令行,传递到一个子 CMD.EXE,其输出会被捕获到内存中,并被当作文件分析
枚举当前环境中的环境变量名称:
for /F "usebackq delims==" %%i in (set) do echo %%i


FOR变量增强
https://www.hxstrive.com/subject/windows_bat/74.htm

其他命令

call当前窗口调用

CALL [drive:][path]filename [batch-parameters] # batch-parameters 指定批处理程序所需的命令行信息 

如果调用程序和被调用程序在同一路径下,直接CALL 文件名即可

  • 不传递参数
    在这里插入图片描述
  • 传递参数
    在这里插入图片描述

参数扩展

可以组合使用 如 %~dp1,只将 %1 扩展到驱动器号和路径
%* 所有的参数
%~1 删除引号(“),扩展 %1
%~f1 将 %1 扩展到一个完全合格的路径名
%~d1 仅将 %1 扩展到一个驱动器号
%~p1 仅将 %1 扩展到一个路径
%~n1 仅将 %1 扩展到一个文件名
%~x1 仅将 %1 扩展到一个文件扩展名
%~s1 扩展的路径只含有短名
%~a1 将 %1 扩展到文件属性
%~t1 将 %1 扩展到文件的日期/时间
%~z1 将 %1 扩展到文件的大小
%~$PATH:1 查找列在 PATH 环境变量的目录,并将 %1扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此修改符会扩展到空字符串
%1 和 PATH 可以被其他有效数值替换
chcp 65001 @echo off echo 产生一个临时文件 > tmp.txt REM 先保存当前目录,再将 c:\windows 设为当前目录 pushd c:\windows call :sub tmp.txt REM 恢复前次的当前目录 popd call :sub tmp.txt del tmp.txt pause :sub echo 删除引号: %~1 echo 扩充到路径: %~f1 echo 扩充到一个驱动器号: %~d1 echo 扩充到一个路径: %~p1 echo 扩充到一个文件名: %~n1 echo 扩充到一个文件扩展名: %~x1 echo 扩充的路径指含有短名: %~s1 echo 扩充到文件属性: %~a1 echo 扩充到文件的日期/时间: %~t1 echo 扩充到文件的大小: %~z1 echo 扩展到驱动器号和路径:%~dp1 echo 扩展到文件名和扩展名:%~nx1 echo 扩展到类似 DIR 的输出行:%~ftza1 REM 空行 echo. goto :eof 

在这里插入图片描述

start另启窗口调用

启动一个单独的窗口以运行指定的程序或命令

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B] [command/program] [parameters] 

打开文件start 文件路径
打开网站start 网站URL

choice返回索引

setlocal 用来实现环境变量局部化,当批处理执行完毕后,定义的 input 变量将销毁。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/112328.html

(0)
上一篇 2026-01-19 09:20
下一篇 2026-01-19 09:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信