原帖由 kingerpk 于 2009-2-4 00:56 发表
我为了练习for写了这么一句
for %%a in (a123,a465,a789) do (
set b=%%a
set c=%b:a=a被替换%
echo %C%
)
pause
但是最后输出的%c%是空的。
我认为是变量延时的问题就改成这样:
setlocal enabledelayedex ...
在第一段代码里,楼主没有使用延迟变量,具体的你可以看这几篇帖子,里面讲的很详细
什么是延迟环境变量扩展?
http://bbs.bathome.net/thread-3083-1-1.html
变量延迟详解
http://bbs.bathome.net/thread-2898-1-1.html
什么情况下该使用变量延迟
http://bbs.bathome.net/thread-2899-1-1.html
一个变量嵌套变量的问题
http://bbs.bathome.net/thread-2900-1-1.html
什么时候使用延迟变量?为什么要使用?
http://bbs.bathome.net/viewthread.php?tid=112
延迟变量通俗解释
http://bbs.bathome.net/viewthread.php?tid=354
而在第二个代码里,楼主把for的参数%%a中的%也替换成!!了,for的参数的%%是不用替换成!!的
第二段代码正确的写法应该是
- setlocal enabledelayedexpansion
- for %%a in (a123,a465,a789) do (
- set b=%%a
- set c=!b:a=a被替换!
- echo !C!
- )
- pause
复制代码
碰到批处理窗口一闪而过的情况,楼主可以试试先在开始的运行里运行cmd,然后到相应的路径里去运行批处理程序,这样窗口就不会一闪而过了,而且会提示你批处理哪里出了问题。 |