延迟变量
enableextension启用命令扩展
disableextensions禁用命令扩展
enabledelayedexpansion启用变量延迟
disabledelayedexpansion禁用变量延迟
setlocal开始;endlocal结束
|
1、批处理为“逐条执行”,不是“逐行执行”,即复合句(for if)的代码块都是为“条“;
2、为什么要使用变量延迟?因为要让复合语句内部的变量实时感知到变量值的变化。
3、在哪些场合需要使用变量延迟语句?在复合语句内部,如果某个变量的值发生了改变,并且改变后的值需要在复合语句内部的其他地方被用到,那么,就需要使用变量延迟语句。而复合语句有:for语句、if……else语句、用连接符&、||和&&连接的语句、用管道符号|连接的语句,以及用括号括起来的、由多条语句组合而成的语句块。最常见的场合,则是for语句和if……else语句。
4、怎样使用变量延迟? (1)
使用 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. |
http://blog.csdn.net/xxb2008
占位记录,还不是很清晰使用
@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;
|