Bat笔记

这篇博客详细介绍了Windows批处理脚本的各种命令和语法,包括注释、输出、变量、全局变量、自定义变量、延迟变量、操作符、批处理调用、If判断、For循环、函数、暂停、变量扩充、字符串截取、字符串替换和字符串查找等。内容涵盖了批处理编程的基础和高级技巧,是学习和使用批处理脚本的重要参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bat笔记

目录

Bat笔记

注释

输出

变量

全局变量

自定义变量

延迟变量

操作符

批处理调用

If判断

For循环

函数

暂停

变量扩充

字符串截取

字符串替换

字符串查找


  • 注释

:行注释,不会有命令回显

:: 行注释,不会有命令回显

%行注释,不会有命令回显,不常用,慎用%

rem 注释内容,会有命令回显

goto label

块注释,以[goto label]开始[:label]结尾。

label自定义,有命令回显:goto label

:label

  • 输出

@echo off/on  

表示执行了这条命令后关闭所有命令(包括本身这条命令)的回显

echo off/on

表示关闭其他所有命令(不包括本身这条命令)的回显

echo.

中间没有空格,表示换行

echo Y|DEL ./test

使用管道命令,确认删除文件

echo helloworld>nul

相当于不输出到标准控制台

  • 变量

  • 全局变量

%0代指批处理文件自身

%1 代表接收的第一个参数,一共1-9个参数

%ALLUSERSPROFILE% 本地 返回“所有用户”配置文件的位置。

%APPDATA% 本地 返回默认情况下应用程序存储数据的位置。

%CD% 本地 返回当前目录字符串。

%CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。

%CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。

%COMPUTERNAME%  系统 返回计算机的名称。

%COMSPEC%  系统 返回命令行解释器可执行程序的准确路径。

%DATE%  系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关

date 命令的详细信息,请参阅 Date。

%ERRORLEVEL%  系统 返回上一条命令的错误代码。通常用非零值表示错误。

%HOMEDRIVE%  系统 返回连接到用户主目录的本地工作站驱动器号。在“本地用户和组”中指定的。

%HOMEPATH%  系统 返回用户主目录的完整路径。用户主目录是在“本地用户和组”中指定的。

%HOMESHARE%  系统 返回用户的共享主目录的网络路径。用户主目录是在“本地用户和组”中指定的。

%LOGONSERVER%  本地 返回验证当前登录会话的域控制器的名称。

%NUMBER_OF_PROCESSORS%  系统 指定安装在计算机上的处理器的数目。

%OS%  系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。

%PATH% 系统 指定可执行文件的搜索路径。

%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。

%PROCESSOR_ARCHITECTURE% 系统返回处理器的芯片体系结构。值x86或IA64基于Itanium

%PROCESSOR_IDENTFIER% 系统 返回处理器说明。

%PROCESSOR_LEVEL%  系统 返回计算机上安装的处理器的型号。

%PROCESSOR_REVISION% 系统 返回处理器的版本号。

%PROMPT% 本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。

%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。

%SYSTEMDRIVE% 系统返回包含系统根目录的驱动器。

%SYSTEMROOT%  系统 返回 Windows server operating system 根目录的位置。

%TEMP% 和 %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。

%TIME% 系统返回当前时间。使用与 time /t 命令相同的格式

%USERDOMAIN% 本地 返回包含用户帐户的域的名称。

%USERNAME% 本地 返回当前登录的用户的名称。

%USERPROFILE% 本地 返回当前用户的配置文件的位置。

%WINDIR% 系统 返回操作系统目录的位置。

  • 自定义变量

%i 可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他;

set path=%~dp0

set path=c:/windows

echo %path%

set var=0

set /a var+=1 // /a表示expression 即可以用各种表达式为变量赋值。

set /p var=请输入变量的值    //接收用户键盘输入

  • 延迟变量

@echo off

setlocal enabledelayedexpansion

for /l %%i in (1,1,5) do (

set a=%%i

echo !a!

)

pause

结果:

1

2

3

4

5

  • 操作符

>>   重定向符,传递并在文件的末尾追加,而>是覆盖

>     输出重定向

<<   输入追加

       <     输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。

       ^     是对特殊符号<,>,&的前导字符,echo test ^>1.txt

       &    第一条命令 & 第二条命令,当第一个命令执行失败了,也不影响后边的命令执行。

&&  第一条命令 && 第二条命令,当碰到执行出错的命令后将不执行后面的命令

||      第一条命令 || 第二条命令,当一条命令失败后才执行第二条命令

""     双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法

,      逗号相当于空格,在某些情况下“,”可以用来当做空格使

()     左右括号必须成对使用,括号中可以包括多行命令

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

  • 批处理调用

在新窗口中执行命令

start "新窗口标题" mvn clean install –DskipTests

start /max "新窗口标题" mvn clean install –DskipTests

start /min "新窗口标题" mvn clean install –DskipTests

:: 等任务执行完,手动关闭窗口后,进行下一个任务

start /w "新窗口标题" mvn clean install –DskipTests

从批处理程序调用另一个批处理程序,并且不终止父批处理程序

call mvn clean install -DskipTests

  • If判断

IF [NOT] ERRORLEVEL number (command) // 一般返回值为0表示成功,1表示失败。

IF [NOT] string1==string2 (command) //如果字符串相等

IF [NOT] EXIST filename (command) //如果filename文件存在

if [NOT] %num1% LSS %num2% //num1如果小于num2

if [NOT] %num1% LEQ %num2% //num1如果小于等于num2

if [NOT] %num1% gtr %num2% //num1如果大于num2

if [NOT] %num1% geq %num2% //num1如果大于等于num2

if [NOT] %num1% EQU  %num2% //num1如果等于num2

if [NOT] %num1% NEQ %num2% //num1如果不等于num2

if defined var //变量var是否被定义

  • For循环

FOR 参数 %%变量名 IN (相关文件或命令) DO (执行的命令)

    %%变量名:

可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他;

参数:

/d 表示目录,它只显示指定目录下的目录名字,例如for /d %%i in (*) do @echo %%i

/r 表示递归指定目录及子目录,例如for /r c:\ %%i in (*.exe) do @echo %%i

    语法为FOR /R [[drive:]path] %%variable IN (set) DO command

/l 表示迭代数值范围,例如for /l %%i in (1,1,5) do @echo %%i

语法为for /l %%Variable in (Start,Step,End) do Command

/f 依次将每个文件读取到内存,按照每一行分成一个一个的元素,忽略空白的行,

    FOR /F ["options"] %%i IN (file) DO command

FOR /F ["options"] %%i IN ("string") DO command

FOR /F ["options"] %%i IN ('command') DO command

Skip:跳过这些无用的行,直接从第N+1行开始处理

Delims:用来告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键

tokens:delims将每一行分为更小的元素时,由它来控制要取哪一个或哪几个

eol用来指定当一行以什么符号开始时,就忽略它。

for /f "skip=2 eol=. tokens=2,3 delims= ," %%i in (a.txt) do echo %%i %%j

  • 函数

  • 暂停

Pause 暂停命令执行

  • 变量扩充

%~0 删除任何引号(")

%~f0 将 %0 扩充到一个完全合格的路径名(“f”是file,即文件)

%~d0 仅将 %0 扩充到一个驱动器号

%~p0 仅将 %0 扩充到一个路径

%~n0 仅将 %0 扩充到一个文件名(“n”是name 文件名)

%~x0 仅将 %0 扩充到一个文件扩展名

%~s0 扩充的路径只含有短名(“s”为Short,短的)

%~a0 将 %0 扩充到文件的文件属性(“a”为attribute,即属性)

%~t0 将 %0 扩充到文件的日期/时间(“t”time)

%~z0 将 %0 扩充到文件的大小(Size 大小)

  • 字符串截取

%var:~startIndex,charNum%

startIndex正数时从0开始从左到右,负数时从1开始从右到左。

charNum 正数表示截取charNum个字符,负数表示从右到左丢掉charNum个字符,再截取从startIndex到结尾的字符串

str=0123456

str:~2,4=2345

str:~-4,2=34

str:~2,-4=2

str:~-4,-2=34

      

  • 字符串替换

%变量:旧文本=新文本%

set aa=伟大的中国!我为你自豪!

echo 替换前:%aa%

echo 替换后:%aa:中国=中华人民共和国%

  • 字符串查找

%变量:旧文本=新文本%

set str=0123456

echo %str%|findstr "^abc">nul

echo errorlevel=%errorlevel%

echo %str%|findstr "^012">nul

echo errorlevel=%errorlevel%

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值