批处理中,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!
------解决方案--------------------对要打开延迟变量开关。用!应用变量。
每一个语句一行,不要都写在一行上面,这样看起来不舒服,以后不容易修改,也就不需要&符号了