【问题标题】:CD command not working inside FOR loop?CD 命令在 FOR 循环中不起作用?
【发布时间】:2016-02-06 02:55:23
【问题描述】:

我是批处理编程的新手。

以下程序的输出:

@ECHO OFF
cd /d C:%HOMEPATH%\AppData\Roaming\Mozilla\Firefox\Profiles
echo %cd%
FOR /F %%i IN (temp_list.txt) DO (
 echo i is %%i
 cd folder
 echo %cd%
)
cd folder
echo %cd%
pause

是:

C:\Users\arnab\AppData\Roaming\Mozilla\Firefox\Profiles
i is e6slask2.default
C:\Users\arnab\AppData\Roaming\Mozilla\Firefox\Profiles
i is random.default
The system cannot find the path specified.
C:\Users\arnab\AppData\Roaming\Mozilla\Firefox\Profiles
The system cannot find the path specified.
C:\Users\arnab\AppData\Roaming\Mozilla\Firefox\Profiles\folder
Press any key to continue . . .

我知道FOR 的逻辑是错误的(我实际上是在做cd folder 两次,只有在“文件夹”中有“文件夹”时才应该这样做)
但是为什么 cd 文件夹没有将我带到 "C:\Users\abhagaba.ORADEV\AppData\Roaming\Mozilla\Firefox\Profiles\folder" 以进行 FOR 循环中的第一次迭代?

CDFOR 循环中不起作用吗?

【问题讨论】:

    标签: batch-file windows-7


    【解决方案1】:

    首先,批处理不会更新代码块内的变量,但必须有办法解决它。这就是为什么Setlocal EnableDelayedExpansion 在使用for/if 命令后非常有用。代码如下所示:

    @ECHO OFF
    Setlocal EnableDelayedExpansion
    
    cd /d C:%HOMEPATH%\AppData\Roaming\Mozilla\Firefox\Profiles
    echo %cd%
    FOR /F %%i IN (temp_list.txt) DO (
        echo i is %%i
        cd folder
        echo !cd!
    )
    cd folder
    echo %cd%
    pause
    

    用感叹号 (%var% -> !var!) 替换百分号将解决您的问题。不用担心代码块外的变量,使用老式的%var%不会影响结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 2013-12-31
      相关资源
      最近更新 更多