延迟变量


enableextension启用命令扩展


disableextensions禁用命令扩展


enabledelayedexpansion启用变量延迟


disabledelayedexpansion禁用变量延迟


setlocal开始;endlocal结束



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.




占位记录,还不是很清晰使用




@echo off


echo 产生一个临时文件 > tmp.txt


Rem 下行先保存当前目录,再将c:\\windows设为当前目录


pushd c:\\windows


call :sub tmp.txt


rem 下行恢复前次的当前目录


popd


call :sub tmp.txt


pause


del tmp.txt


exit


:sub


@echo off


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.


goto :eof


pause;