- ·上一篇文章:黑白转换之PAUSE
- ·下一篇文章:查找命令find & findstr
- ·百度中搜索更多的关于“用call对变量进行截取”相关内容
- ·谷歌中搜索更多的关于“用call对变量进行截取”相关内容
- ******申明******
- 本站文章内容有部分为收录网络中其他网友内容,DOS资源站不保证所有的代码都适合你使用。
- 由于编辑匆忙,有可能造成某些脚本文件出现丢失代码或代码无法运行的情况,请网友根据情况自行修改。
- 如果能将出错部分反馈给我,那就更好了。
用call对变量进行截取
call 具有二次预处理功能,这源于它的函数调用功能(个人愚见) .
由于%v:~%x%,%y%%会对%预处理,比如直接%v:~%x%,%y%%对最外边的一对%留下,这让我们想到用call再进一步进行预处理读取.
@echo off
::在命令行下不能正确显示
set a=12345678901234567890
set /p b=输入两个正整数(不大于9)用空格隔开:
call echo %%a:~%b:~,1%,%b:~-1%%%
pause
call :标签 "参数1" "参数2" ...
从:开始到首次出现的空格,当作标签的结束符.(标签可作为%0参数,即标签前与后的空格将被视作参数分隔符,)
call :^^^.... 将会是个空语句.
主标签中&(非^&)后的字符被当作语句执行.执行完后再跳转到副标签处.
副标签中含|&><:5个字符其中之一时,后面的字符被当作注释,将不进行任何解释.
标签字符不能为单独的<space> &()^=;%+,:|但以下特殊字符作为的标签是合法的:
`, ' ,^^ , ^^& , "<space>" , " , "", @,[,],{,},?,/,\,*,-,$,#,~,.,
当启用延迟环境变量时,!不能作为标签.
汉字,与其他扩展字符,以及混合字符也可以作为标签.
虽然不提倡用这些特殊字符作为标签,但是它们可以实现一些一般方法难以实现的脚本.
参数最多9个,再多就要借助"shift"命令(见后面)
call 在跳转的标签时遵循下面规则:
1, 大小写不区分,
2, 先在call 语句后面找,后面没有再在前面找.
3, 多个相同标签时只执行找到的第一个标签.
将这三点归纳成一句话就是:
,大小写不分,先后再前,执行一次.
另外
A.bat文件
@echo off
call %*
goto :eof
:a
echo a任务 %*
goto :eof
...
若想要执行a任务,B.bat文件里可以这样调用(若是命令行下可以省去call)
@echo off
call A.bat :a 1 2 5
pause
这里在非命令行下运行B.bat时,B.bat内那个call是必须的,若是在命令行下直接B.bat调用则B.bat内那个call则可以省去l
模板:
@echo off & setlocal ENABLEEXTENSIONS
set x=2
set y=3
call :Area %x% %y% answer
echo/The area is: %answer%
pause
goto :EOF
:Area %width% %height% result
setlocal
set /a res=%1*%2
endlocal & set "%3=%res%"
goto :EOF

