延迟变量
|
1、批处理为“逐条执行”,不是“逐行执行”,即复合句(for if)的代码块都是为“条“;
2、为什么要使用变量延迟?因为要让复合语句内部的变量实时感知到变量值的变化。
3、在哪些场合需要使用变量延迟语句?在复合语句内部,如果某个变量的值发生了改变,并且改变后的值需要在复合语句内部的其他地方被用到,那么,就需要使用变量延迟语句。而复合语句有:for语句、if……else语句、用连接符&、||和&&连接的语句、用管道符号|连接的语句,以及用括号括起来的、由多条语句组合而成的语句块。最常见的场合,则是for语句和if……else语句。
4、怎样使用变量延迟? 使用 setlocal enabledelayedexpansion,将 % 对变量引用改为使用 !; (2) 使用 call 语句:在原来命令的前部加上 call 命令,并把变量引用的单层 % 对改为双层 %%
ECHO 处于关闭状态 | @echo off set num=0&&echo %num% pause |
改进-拆成两行 | @echo off set num=0 echo %num% pause |
改进-变量延迟 | @echo off setlocal enabledelayedexpansion set num=0&&echo !num! pause |
改进-call | @echo off set num=0 && call echo %%num%% pause |
变量与扩展变量 | @echo off
setlocal EnableDelayedExpansion for /r %%i in (*.jsp) do ( echo %%i echo %%~xi pause; )
pause; |
%~I 展开删除了周围的任何引号 (") 的 %I %~fI 将 %I 展开到完全合格的路径名 %~dI 只将 %I 展开到驱动器号 %~pI 只将 %I 展开到路径 %~nI 只将 %I 展开到文件名 %~xI 只将 %I 展开到文件扩展名 %~sI 展开路径以只包含短名称 %~aI 将 %I 展开到文件的文件属性 %~tI 将 %I 展开到文件的日期/时间 %~zI 将 %I 展开到文件大小 %~$PATH:I 搜索 PATH 环境变量所列出的目录 %~dpI 只将 %I 展开到驱动器号和路径 %~nxI 只将 %I 展开到文件名和扩展名 %~fsI 将 %I 展开到只包含短名称的完整路径名 %~dp$PATH:I 在 PATH 环境变量所列出的目录中搜索 %I,并展开到第一个找到结果的驱动器号和路径 %~ftzaI 将 %I 扩展到与 dir 相似的输出行 | Echo 删除引号:%~1 Echo 扩充到路径:%~f1 Echo 扩充到一个驱动器号:%~d1 Echo 扩充到一个路径:%~p1 Echo 扩充到一个文件名:%~n1 Echo 扩充到一个文件名:%~n0 Echo 扩充到一个文件扩展名:%~x1 Echo 扩充的路径指含有短名:%~s1 Echo 扩充到文件属性:%~a1 Echo 扩充到文件的日期/时间:%~t1 Echo 扩充到文件的大小:%~z1 Echo 扩展到驱动器号和路径:%~dp1 Echo 扩展到驱动器号和路径:%~dp0 Echo 扩展到文件名和扩展名:%~nx1 Echo 扩展到类似 DIR 的输出行:%~ftza1 Echo. |
占位记录,还不是很清晰使用
|