基础
- rem 是注释
- set 命令用于设置变量(注意不要与已存在的环境变量同名)
脚本参数
echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5
REM echo %%1 = %1
REM 上面这句表示:%%1 转义为 %1, 而 %1 表示第一个命令行参数
setlocal
开启局部范围,范围结束,恢复原本变量的值。延时展开(delaed expansion), 需要使用 !var!
来展开变量,原本是这样的 %var% 。
@echo off
set var1=jkl1
set var2=abc2
set "var1=%var2%" & set "var2=%var1%"
echo var1=%var1% \t var2=%var2%
setlocal EnableDelayedExpansion
REM setlocal EnableDelayedExpansion
Set "_var=first"
Set "_var=second" & Echo %_var% !_var!
REM first
endlocal
Set "_var=first"
Set "_var=second" & Echo %_var%
顺序执行命令
REM 顺序执行两行命令
echo first & echo second
REM && 是条件运算符,与 & 不同
echo first && echo second
for
rem 在cmd窗口中,for之后的形式变量I必须使用单百分号引用,即%i;而在批处理文件中,引用形式变量i必须使用双百分号,即%%i。
rem 对目录使用 for
for /d %%d in (.) do dir %%d
rem 对一类文件使用
@REM for %%f in (*.bat) do type %%f
rem 对一个文件使用
@REM ----------------------------------------------------------------------------------------------
for /f "eol=; tokens=2,3* delims=," %%i in (myfile.txt) do @echo %%i %%j %%k
for /f "tokens=1-5 delims=:," %%a in (易经.txt) do echo %%a %%b %%c %%d %%e
@REM 通俗讲,共同提取每一行的第m小节的内容。
@REM 因此,可以用该命令来指定提取文本信息。
@REM tokens=有时表示提取全部。
@REM tokens=m表示提取第m列。
@REM tokens=m,n表示提取第m列和第n列。
@REM tokens=m-n表示提取第m列至第n列。
@REM Tokens=*表示删除每行前面的空格。忽略行首的所有空格。
@REM tokens=m*提取第m列以后的所有字符,星号表示剩余的字符。
@REM tokens=m,*提取第m列以后的所有字符,星号表示剩余的字符。
@REM 输出变量的个数由定义了的tokens决定。
@REM 在 FOR 语句中显式声明 %%i。使用tokens= 隐式声明%%j 和%%k。只要不会引起试图声明高于字母“z”或“Z”的某个变量,则使用tokens= 可以指定最多 26 个输出变量。
@REM 在使用 usebackq 的情况下
@REM `dir` 作为命令
@REM “dir" 作为文件
@REM 在没有使用 usebackq 的情况下
@REM `dir` 系统不能找到 dir
@REM “dir" 作为字符串
@REM usebackq 用于处理带空格的字符串
@REM ----------------------------------------------------------------------------------------------
rem 对步长使用
for /l %%i in (1, 1, 10) do @echo %%i
@REM for /f "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k
参考网址:https://www.cnblogs.com/Jian-Zhang/p/6066429.html
参考网址:https://www.hxstrive.com/subject/windows_bat.htm?id=74
参考网址:https://www.cnblogs.com/it-tsz/p/11306672.html
实现函数功能
call :helloworld Hello World
rem call 命令用于调用另一个脚本,或一个标签,后面跟的是参数
rem :helloworld 是一个标签,可以在定义前使用
set return_value = 0
goto :endhelloworld
rem goto 调转到指定的标签
:helloworld
if 9 GTR 7 (
set return_value = 1
echo %1
) else (
set return_value = 0
)
echo 函数内
goto :EOF
rem & 连续执行命令
rem goto :EOF 跳转到文件结尾, :EOF 标签是默认存在的,你可以去掉看看效果
:endhelloworld
echo 函数外
得到命令执行的结果
@echo off
set attr = ""
setlocal EnableDelayedExpansion
REM for /f "usebackq" %%i in (`dir`) do set attr=!attr!;%%i
REM for /f "usebackq eol=} delims={" %%i in (`dir`) do @echo %%i
REM for /f "usebackq eol=} delims={" %%i in (`dir`) do set attr !attr!;%%i
dir > testdir.txt
for /f %%i in (testdir.txt) do echo %%i
echo %attr%
endlocal
读取文件内容
rem 方法一
for /f %%i in (.\tmp.txt) do echo %%i
rem 方法二
set /P qq=<tmp.txt
字符串
@echo off
set str=abcdefghijkl
rem 前面4个字符
echo %str:~0,4%
rem 后面4个字符
echo %str:~-4%
rem 第一个到倒数第5个字符
echo %str:~0,-4%
rem 3 到 4
echo %str:~2,3%
rem 倒数第二个开始,提取5个字符
echo %str:~1,5%
rem 拼接
set str1=abc
set str2=abc
set %str3=%aa%%bb%"
rem 替换
echo %str:a=jkl%
获取用户输入
@echo off
:begin
rem 获取用户输入
rem 定义一个没有初始值的变量
set input=
rem 提示用户输入信息,最后一个冒号是英文冒号
set /p input=请输入字符串:
echo 你输入的字符串是:%input%
rem pause>null
rem 去到 begin 标签处再运行
goto begin
日期时间
REM 时间
echo 当前时间:%time% %time:~0,2%点%time:~3,2%分%time:~6,2%秒
标签:set,%%,cmd,使用,rem,笔记,echo,tokens,REM
From: https://www.cnblogs.com/lin-hui/p/18179517