批处理 - Zirpon | Blog
☀️ 🌃

批处理

The quick brown fox jumps over the lazy dog

Posted by Zirpon Cheung on 2024-07-06
Estimated Reading Time 4 Minutes
Words 1.1k In Total
Viewed Times

批处理

🏝️Example

🏝️无限循环,定时,固定时间间隔

1
2
3
4
5
6
7
@echo off

:start
echo jajaja
choice /t 5 /d y /n >nul

goto start

🏝️搜索目录

1
2
3
4
5
6
@echo off
::搜索当前目录下的文件
for %%i in (*.*) do echo "%%i"
:: 或者
for /r "目录路径" %%a in (匹配规则,例如*.txt) do 执行操作
pause

🏝️for

reference

Windows 批处理(bat) for循环语句使用教程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off

for %%a in (ele1 ele2 ele3) do (
echo %%a
)
for %%a in (1,2,3) do (
echo %%a
)
pause

for /d %%i in (./docs/) do (echo %%i)

:: for /l %%i in (start,step,end) do command
for /l %%i in (1,3,20) do (echo %%i)

for /f %%i in (.\test.txt) do (echo %%i)

:: delims这个参数,=后面有一个空格,意思是再将每一个元素以空格分割,默认是只取分割以后的第一个元素。
for /f "delims= " %%i in (.\test.txt) do echo %%i

🏝️If 命令 有三种格式:

🏝️1. if “参数” == “字符串”  待执行的命令

参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)如

1
2
3
if "%1"=="a" format a:
if { %1 }=={ } goto noparms
if { %2 }=={ } goto noparms

🏝️2. if exist 文件名  待执行的命令

如果有指定的文件,则条件成立,运行命令,否则运行下一句 如

1
if exist config.sys edit config.sys

🏝️3. if errorlevel / if not errorlevel 数字  待执行的命令

如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。如

1
if errorlevel 2 goto x2

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

🏝️注释方式

1、:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)
2、rem 注释内容(不能出现重定向符号和管道符号)
3、echo 注释内容(不能出现重定向符号和管道符号)〉nul
4、if not exist nul 注释内容(不能出现重定向符号和管道符号)
5、:注释内容(注释文本不能与已有标签重名)
6、%注释内容%(可以用作行间注释,不能出现重定向符号和管道符号)
7、goto 标签 注释内容(可以用作说明 goto 的条件和执行内容)
8、:标签 注释内容(可以用作标签下方段的执行内容)

@echo off 表示执行了这条命令后关闭所有命令(包括本身这条命令)的回显。而 echo off 命令则表示关闭其他所有命令(不包括本身这条命令)的回显,
@的作用就是关闭紧跟其后的一条命令的回显,

🏝️判断语句

🏝️1. 判断字符串相等。

示例如下:新建一个文本文件,命名为 ifstring,修改文件类型为 bat,:

1
2
3
4
5
6
7
8
@echo off

set "var=this is an apple"
rem 比较%var%是否等于apple,如果相等,返回OK,否则返回NO.

if "%var%"=="apple" (echo OK) else echo NO

pause>nul

注意:if 判断字符串相等时候,后面用的是“==”,而不是“=”。

🏝️2. 判断数值相等。

示例如下:新建一个文本文件,命名为 ifnumber,修改文件类型为 bat,:

1
2
3
4
5
6
7
8
9
@echo off
set /a num1=100
set /a num2=10

if %num1% gtr %num2% echo %num1%大于%num2%
if %num1% EQU %num2% echo %num1%等于%num2%
if %num1% LSS %num2% echo %num1%小于%num2%

pause>nul

注意:比较运算符分为以下几种:

EQU - 等于   NEQ - 不等于   LSS - 小于   LEQ - 小于或等于   GTR - 大于   GEQ - 大于或等于

🏝️3. 结合 errorlevel 使用

示例如下:新建一个文本文件,命名为 iferrorlevel,修改文件类型为 bat,:

1
2
3
4
5
6
7
@ECHO off

XCOPY F:\studybat\if\iferrorlevel.bat D:\
IF ERRORLEVEL 1 ECHO 文件拷贝失败
IF ERRORLEVEL 0 ECHO 成功拷贝文件

pause>nul

注意:环境变量 errorlevel 的初始值为 0,当一些命令执行不成功,就会返回一个数值,如:1 ,2 等

🏝️4. 判断变量定义与否。

示例如下:新建一个文本文件,命名为 ifdefined,修改文件类型为 bat,:

1
2
3
4
5
6
7
8
@echo off
set "str1=ok"
set "str2=no"
if defined str1 echo str1已经被定义
if defined str2 echo str2已经被定义
if defined str3 (echo str3已经被定义) else echo str3 没有被定义

pause>nul

Here is a footnote reference,[1] and another.[2]

🏝️Endnotes


  1. Here is the footnote. ↩︎

  2. Here’s one with multiple blocks. ↩︎