求批处理高手,call调用的问题

有文件E:\batch\libs\test.bat、E:\batch\libs-debug\To.bat、E:\batch\libs-debug\To1.battest.... 有文件E:\batch\libs\test.bat、E:\batch\libs-debug\To.bat 、E:\batch\libs-debug\To1.bat
test.dat如下
@echo off
cd ..
set var="default"
setlocal EnableDelayedExpansion
for /f "delims=" %%i in (' DIR %cd% /ad /b ^| find /i "libs-debug" ') do (
set var=%%i
echo var=!var!
call .\libs-debug\To.bat
call .\libs-debug\To1.bat
)
pause
To.bat如下
@echo off
cd /d %~dp0
echo To:%cd%
pause&goto :eof
To1.bat如下

@echo off
cd /d %~dp0
echo To1:%cd%
pause&goto :eof
运行test.bat使可以调用To.bat,但是调用To1.bat时就找不到路径,想不明白为什么出现这个情况呢,是call的实现有bug吗?求大神解答
展开
 我来答
yyykkkyyyy
2015-10-13 · TA获得超过3136个赞
知道大有可为答主
回答量:2691
采纳率:40%
帮助的人:3293万
展开全部
call .\libs-debug\To.bat
点开始的路径表示相对当前路径下的,执行这句时当前路径是E:\batch即表示call E:\batch\libs-debug\To.bat
但此句执行后当前路径被改到E:\batch\libs-debug
所以第2个
call .\libs-debug\To1.bat
出问题不难理解吧,有疑问再追问
更多追问追答
追问
call .\libs-debug\To.bat
echo %cd%
call .\libs-debug\To1.bat
我在调用To.bat后打印了%cd%,路径不是没有改变么
追答
呵呵,这涉及另一问题,表面上当前路径没变,实际是变了的
批处理执行时是逐句解释(或称为预处理)执行的,所谓逐句的一句包括带连接命令、括号等含子句的复合句,对其一整句先解释,解释过程中遇变量取值则一次性解释为整句之前的值比如下段
set a=1
(set a=2
echo 复合句内a=%a%)
echo 复合句外a=%a%
pause
在执行那带括号的两行时,已被预处理为
(set a=2
echo 复合句内a=1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式