日期:2014-05-17  浏览次数:20771 次

批处理中,for的用法
代码tmp.bat:
echo on
for /f %%i in ('dir /b') do (
set str1=%%i
echo "%str1%"
pause
)

但每次输出结果都一样。就是echo输出的,与之前set的值不同。

下面是本地测试结果:

首先查看dir /b
E:\Test>dir /b
Debug
Test
Test.ncb
Test.sln

-------------------------------

cmd窗口中运行tmp.bat

E:\Test>e:/tmp.bat

E:\Test>echo on

E:\Test>for /F %i in ('dir /b') do (
set str1=%i
 echo ""
 pause
)

E:\Test>(
set str1=Debug
 echo ""
 pause
)
""
请按任意键继续. . .

E:\Test>(
set str1=Test
 echo ""
 pause
)
""
请按任意键继续. . .

E:\Test>(
set str1=Test.ncb
 echo ""
 pause
)
""
请按任意键继续. . .

E:\Test>(
set str1=Test.sln
 echo ""
 pause
)
""
请按任意键继续. . .

E:\Test>

------解决方案--------------------
楼上写得已经非常经典了,学习了!
------解决方案--------------------
除了使用“延迟变量”(百度一下!!)
你还得注意:(set str1=%%i & echo !str1!)中间的&,
意思是执行完上一条命令之后,继续执行下一条
不要直接就set str1=%%i echo !str1!
------解决方案--------------------
对要打开延迟变量开关。用!应用变量。
每一个语句一行,不要都写在一行上面,这样看起来不舒服,以后不容易修改,也就不需要&符号了