随笔:因为我的编程是倒着学的,先从python开始的
现在看到bat里有很多熟悉的python里概念的影子,感觉很激动。
比如应该是子程序发展成了函数把!然后调用 文件/子程序/函数 带参数的方法,还是一直没变呢!
bat和dos是我上学那个时代的东西,可惜一直错过了这么多年,要补课补课,但是很开心,旧相识重逢了吗?哈哈
新知识:start into back to ??
start
into main
into sub
back to main 请按任意键继续. .
函数 子程序
子程序调用
语法:类goto,但不一样,这个关键字和excel vba的sub 很像
call 调用子程序时,需要加 : 而goto 不需要
call文件时不需要加
call :sub
:sub
----------------------
goto end
:end
---------------------
@echo off
echo start
:main
echo main执行
call :sub 调用sub
pause
:sub
echo %1
echo sub执行
pause
文件(脚本)之间调用,使用call
- calll 不会打开新窗口
- 1.ba必须先执行完call 2.bat
语法
call xxx.bat
-----------------------
1.bat内容
@echo off
echo 1
call 2.bat 此时1.bat打开2.bat
pause
2.bat内容
@echo off
echo %1
echo 2
pause
文件(脚本)直接调用,但是使用start打开新窗口
- start会打开新窗口
- 1.bat在start不返回前会继续往下执行
1.bat内容
@echo off
echo 调用2.bat前
start 2.bat 此时1.bat打开2.bat
echo 调用2.bat后
pause
2.bat内容
@echo off
echo %1
echo 2
pause
参数
一般所说的参数,是指调用时的参数,参数就是调用文件,或子程序时代的实参
而子程序或脚本里带的参数,称为 形参
@echo off
echo %1
echo 2
pause
参数详细
- 一般来说,只有%0 1% ~ 9%这10个参数
- 0%代表 程序 自身
- 有移位操作,shift
- shift 默认是参数往左边移一位,并且是所有参数都跟着移位
- shift /5 表示不是移动5位!
- shift /5 表示 只有大于%5的参数都往左边移位,0% -4%不动,而5%被覆盖!
参数移位详细
%* 从第一个参数开始的所有参数
@echo off
call:shift 1 2 3 4 5 6 7 8 9
:shift
echo off
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
shift
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
shift
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
pause
@echo off
call:shift_example 1 2 3 4 5 6 7 8 9
:shift_example
echo off
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /8
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /5
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
pause
批参数(%n)的替代已被增强。您可以使用以下语法:
%~1 - 删除引号("),扩充 %1
%~f1 - 将 %1 扩充到一个完全合格的路径名
%~d1 - 仅将 %1 扩充到一个驱动器号
%~p1 - 仅将 %1 扩充到一个路径
%~n1 - 仅将 %1 扩充到一个文件名
%~x1 - 仅将 %1 扩充到一个文件扩展名
%~s1 - 扩充的路径指含有短名
%~a1 - 将 %1 扩充到文件属性
%~t1 - 将 %1 扩充到文件的日期/时间
%~z1 - 将 %1 扩充到文件的大小
%~$PATH : 1 - 查找列在 PATH 环境变量的目录,并将 %1
扩充到找到的第一个完全合格的名称。如果环境
变量名未被定义,或者没有找到文件,此组合键会
扩充到空字符串
可以组合修定符来取得多重结果:
%~dp1 - 只将 %1 扩展到驱动器号和路径
%~nx1 - 只将 %1 扩展到文件名和扩展名
%~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1,
并扩展到找到的第一个文件的驱动器号和路径。
%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。
可以参照 call/? 或 for/? 看出每个参数的含意
echo load "%%1" "%%2">c:test.txt
生成的文件内容为 load "%1" "%2"
批处理文件里,用这个格式把命令行参数输出到文件