General:
1)
显示当前文件所在路径:
%~dp0
2)
当读取路径中存在空格时候,必须加上 双引号 “”
eg:
set home_dir_sean=%~dp0
echo %home_dir_sean%
dir /s/b "%home_dir_sean%" > C:\Users\brand\Desktop\a.txt
一. set
- set /p 用于赋值 eg:
将文本1.txt 的第一行数据 赋值给变量 a
set /p a=<1.txt
echo %a%
- set /a 用于计算 eg:
如果直接打印%car% 结果将会是 : 2*3
set /a car= 2*3
echo %car%
二. for 循环
参照:https://www.cnblogs.com/gered/p/10682741.html#autoid-4-0-0
- 循环读取文件中的多行内容
for /f "delims=, tokens=2" %%i in (1.txt) do (echo %%i)
“tokens=2”表示提取第二个字段值
delims=, 表示每行以 , 号进行分割
延时变量:
在使用时,我这里尚且不关注内部运行机制,先了解使用的方法。
rem --未使用延时变量
for /l %%i in (1 1 5) do (
set v=%%i
echo %v%
)
打印结果:
5
5
5
5
5
这里我们发现和我们所预期的 1,2,3,4,5 不一样
再次测试把 变量初始化放在外面:
set v=a
for /l %%i in (1 1 5) do (
set v=%%i
echo %v%
)
打印结果:
a
a
a
a
a
说明循环进行了,但是循环过程中并没有赋值的操作。
此处我不做深究,只想得到如何处理成理想的结果,因此想要得到预期的结果我们的处理方法是 如下:
SETLOCAL ENABLEDELAYEDEXPANSION
for /l %%i in (1 1 5) do (
set v=%%i
echo !v!
)
打印结果:
1
2
3
4
5
因此得出结论:需要做的修改是
1) 在代码中加入: SETLOCAL ENABLEDELAYEDEXPANSION
2) 取出变量时 :使用 !variable! 的方式替代 %variable%的方式
缺一不可
三 . Goto :eof
这个命令相当于 break的作用,可以用于方法中和结束的标志。
eg:
@ echo off
call :label
echo 1
echo 2
set home_dir_sean=%~dp0
echo %home_dir_sean%
dir /s/b "%home_dir_sean%" > C:\Users\ad\Desktop\a.txt
echo "append done"
Goto :eof
:label
echo 3
echo 4
Goto :eof
结果打印:
3
4
1
2
C:\D\ad\bat-learn\
"append done"
如果去掉中间的 Goto :eof
,查看结果
@ echo off
call :label
echo 1
echo 2
set home_dir_sean=%~dp0
echo %home_dir_sean%
dir /s/b "%home_dir_sean%" > C:\Users\brandonxian\Desktop\a.txt
echo "append done"
rem Goto :eof
:label
echo 3
echo 4
Goto :eof
3
4
1
2
C:\D\ad\bat-learn\
"append done"
3
4
结果显示出 注释掉Goto :eof
后的打印结果 还打印:lable
的结果。
由此可见此命令做为 结束标志。
四 . dir 展示文档下的文件信息(和linus/unix 的 ls 类似)
查看帮助说明:
dir /?
1) dir /b
只打印文件列表不展示信息
2) dir /s
显示指定目录和所有子目录中的文件。