Board logo

标题: [文件操作] PUSHD变量路径失败了,有谁能解惑一下嘛。。 [打印本页]

作者: yangyedong    时间: 2017-12-25 15:59     标题: PUSHD变量路径失败了,有谁能解惑一下嘛。。

  1. @echo off & setlocal EnableDelayedExpansion
  2. For /F "Delims=" %%i In (test.cfg) Do (
  3. set file=%%~fi
  4. echo !file!
  5. pushd !file!
  6. echo %cd%
  7. )
  8. pause
复制代码
不知道为什么,pushd到变量里的路径是无效的,但是之前打印出来是没有问题的,请问这个是为什么呢?
作者: /zhqsystem/zhq    时间: 2017-12-25 19:23

参照以下代码找为什么
cd/d %windir%
call echo,%%cd%%
for /f "tokens=* delims=" %%i in ("%~dp0")do (
pushd %%~fi
call echo,%%cd%%
)
作者: yhcfsr    时间: 2017-12-25 22:30

回复 1# yangyedong


    用了变量延迟,变量用!,别用%
启用变量延迟的情况下,%CD%一直是复合语句前的活动路径,而不是PUSHD后的路径。
想要访问PUSHD后的路径,用!CD!
作者: yangyedong    时间: 2017-12-28 10:11

回复 3# yhcfsr


    我明白了!!我想当然了把当前路径就写成%cd%了。。主要不熟悉延迟延迟变量
作者: yangyedong    时间: 2017-12-28 15:24

感谢楼上两位大佬的提醒!!我后来仔细看了网上关于“变量延迟”的文档,终于明白是批处理的预处理机制造成的,不管是启动延迟变量的方式或者使用call,都可以解决我的问题,非常感谢!!

另外,关于批处理FOR语句的应用我在网上找到的一片文章通过描述批处理的内在机制把很多问题都描述的通俗易懂,大家可以参考一下。
链接:
https://max.book118.com/html/2017/0106/80706293.shtm




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2