求批处理高手,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吗?求大神解答 展开
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吗?求大神解答 展开
1个回答
展开全部
call .\libs-debug\To.bat
点开始的路径表示相对当前路径下的,执行这句时当前路径是E:\batch即表示call E:\batch\libs-debug\To.bat
但此句执行后当前路径被改到E:\batch\libs-debug
所以第2个
call .\libs-debug\To1.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)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询