批处理使用enabledelayedexpansion 之后pushd与popd不能正常工作

@echooffsetbinDir=%~dp0pushd%binDir%cd..\lib\setlocalenabledelayedexpansionpopd记录当前目录... @echo off
set binDir=%~dp0
pushd %binDir%
cd ..\lib\
setlocal enabledelayedexpansion
popd

记录当前目录,然后进入父母的lib目录下,然后启用变量延迟,恢复到记录的目录。中间使用setlocal enabledelayedexpansion就不能正常运行,没报错。求高手指教
展开
 我来答
albumin
2013-12-30 · TA获得超过1.2万个赞
知道大有可为答主
回答量:4889
采纳率:87%
帮助的人:2329万
展开全部
用个变量保存旧的路径然后恢复不行吗,比如 "set olddir=%cd%"
setlocal 定义一个环境变量区域,在这个区域popd就找不到pushd保存的环境变量,也就不能正确恢复目录,为每个setlocal加一个对应的endlocal命令就会恢复到原先的环境变量设置,像这样
pushd %binDir%
cd ..\lib\
setlocal enabledelayedexpansion
需要使用变量延迟的命令
endlocal
popd
setlocal有对应的endlocal,这样popd就能恢复pushd保存的目录了
yyykkkyyyy
2013-12-31 · TA获得超过3136个赞
知道大有可为答主
回答量:2691
采纳率:40%
帮助的人:3268万
展开全部
setlocal 表示之后设置本地化状态,如命令附有enabledelayedexpansion表示同时使用变量延迟扩展状态生效,(!符随即成为变量取值符),不过之前的变量设置以及当前路径会继承(与另一网友说的不同),,当遇到endlocal (结束本地化)命令后,这期间的涉及变量赋值或当前路径的改变将失效,恢复到setlocal之前的状况
我估计有一定基础的话应该容易理解,所述不能正常运行,可能当前路径不对也可能变量赋值情况与预计不符,如仍找不到原因请把代码贴全
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式