批处理
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 20
| @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 数字 待执行的命令
如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。
如
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 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| @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 没有被定义
@echo off chcp 65001 >nul setlocal enabledelayedexpansion
REM 设置 gawk 的语言环境为 UTF-8 set LC_ALL=en_US.UTF-8 set LANG=en_US.UTF-8
REM 使用 for /f 捕获 awk 的输出 for /f "delims=" %%A in ('awk "NR == 24 {print $3}" spider-avdanyuwiki.py') do ( set "result=%%A" )
REM 打印保存的变量 echo %result%
set str1=%result:~1,-1% echo str1=%str1% SET a=spider-avdanyuwiki SET b=%a%-%str1%.json SET d=%a%-%str1%.log
pause>nul
|
Here is a footnote reference,[^1] and another.[^longnote]
Endnotes
[^1]: Here is the footnote.
[^longnote]: Here’s one with multiple blocks.