# 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

child.bat

@echo off
echo "hello world!"
echo "hello:"%1
pause
1
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

"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

child.bat:

@echo off
echo 进入child
echo %name%
set name=小王
pause
1
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 按属性,日期,大小,路径名显示文件。