在FOR循环中CD命令不起作用?

时间:2015-11-05 10:09:05

标签: batch-file windows-7

我是批处理编程的新手。

以下程序的输出:

@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两次,除非文件夹中有一个'文件夹,否则应该是可行的#39)
但是为什么cd文件夹没有带我到"C:\Users\abhagaba.ORADEV\AppData\Roaming\Mozilla\Firefox\Profiles\folder"进行FOR循环的第一次迭代?

CD循环中FOR不起作用吗?

1 个答案:

答案 0 :(得分:2)

首先,批处理不要更新代码块中的变量,但必须有办法解决它。这就是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%不会影响结果。