# windows脚本入门4-调用其他批处理
# call和start
# call的使用
call [drive:][path]filename [parameters]
call :label [parameters]
call cmd
第一条命令:调用另一个批处理,并从label开始。
第二条命令:调用本批处理的一个标签,相当于goto,但是需要使用":"。
实例1:
main.bat
@echo off
set name=小李
call child.bat %name%
pause
1
2
3
4
2
3
4
child.bat
@echo off
echo "hello world!"
echo "hello:"%1
pause
1
2
3
4
2
3
4
"hello world!"
"hello:"小李
实例2:
@echo off
call :a1
echo "hi"
:a1
echo "hello cat"
goto a2
echo "hello dog"
:a2
echo "hello world"
pause
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
"hello cat"
"hello world"
# call和start区别
call是在暂停一个脚本的同时调用另一个批处理程序,且子程序能获取和更改父程序的变量,并能将更改后的变量返回给父程序。
start是本脚本继续运行同时执行另一个脚本,如果调用另一个批处理的话它是实例化一个新的cmd,这导致子程序能继承父的程序的变量但是无法修改。
实例1:
main.bat:
@echo off
set name=小李
call child.bat
echo 继续执行main
echo %name%
pause
1
2
3
4
5
6
2
3
4
5
6
child.bat:
@echo off
echo 进入child
echo %name%
set name=小王
pause
1
2
3
4
5
2
3
4
5
进入child
小李
请按任意键继续. . .
继续执行main
小王
从上面发现进入child后main一直在暂停,在child修改完name变量,返回给了main。
将上面的call改成start,那么将会有两个cmd窗口,这两个窗口近乎同时弹出来。
第一个:
继续执行main
小李
第二个:
进入child
小李
将start改成start /wait。会有怎么的结果,有兴趣的同学可以试下。
# 目录相关内容
# 切换目录
cd /d TargetPath
# 当前路径扩展
扩展符 | 含义 |
---|---|
%0 | 当前批处理完整路径 |
%~0 | 去除引号 |
%~d0 | 仅得到所在盘符 |
%~p0 | 仅得到路径 |
%~n0 | 仅得到文件名 |
%~x0 | 仅得到文件扩展名 |
%~s0 | 仅包含短名的完整路径 |
%~a0 | 仅得到文件的文件属性 |
%~t0 | 仅得到文件的日期时间 |
%~z0 | 仅得到文件的大小 |
# 常用组合
扩展符 | 含义 |
---|---|
%~dp0 | 得到驱动器名,路径名。 |
%~nx0 | 得到当前文件名及其扩展名。 |
%~ftza0 | 按属性,日期,大小,路径名显示文件。 |