关于批处理文件:CD命令在FOR循环内部不起作用?

CD command not working inside FOR loop?

我是批编程新手。

下列程序的输出:

1
2
3
4
5
6
7
8
9
10
11
12
@ECHO OFF
cd /d C:%HOMEPATH%\AppData
oaming\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

是:

1
2
3
4
5
6
7
8
9
10
11
12
13
C:\Users\arnab\AppData
oaming\Mozilla\Firefox\Profiles
i is e6slask2.default
C:\Users\arnab\AppData
oaming\Mozilla\Firefox\Profiles
i is random.default
The system cannot find the path specified.
C:\Users\arnab\AppData
oaming\Mozilla\Firefox\Profiles
The system cannot find the path specified.
C:\Users\arnab\AppData
oaming\Mozilla\Firefox\Profiles\folder
Press any key to continue . . .

我知道FOR逻辑是错误的(我实际上做了两次cd folder,只有在‘文件夹’中有‘文件夹’的情况下才有可能)但是为什么CD文件夹不把我带到"C:\Users\abhagaba.ORADEV\AppData
oaming\Mozilla\Firefox\Profiles\folder"
,在FOR循环中进行第一次迭代?

CDFOR循环内不工作吗?


首先,批处理不更新代码块内的变量,但必须有解决方法。这就是为什么当使用forif命令时,Setlocal EnableDelayedExpansion非常有用。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@ECHO OFF
Setlocal EnableDelayedExpansion

cd /d C:%HOMEPATH%\AppData
oaming\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%不会影响结果。