[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
原帖由 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的参数的%%是不用替换成!!的
第二段代码正确的写法应该是
  1. setlocal enabledelayedexpansion
  2. for %%a in (a123,a465,a789) do (
  3. set b=%%a
  4. set c=!b:a=a被替换!
  5. echo !C!
  6. )
  7. pause
复制代码

碰到批处理窗口一闪而过的情况,楼主可以试试先在开始运行里运行cmd,然后到相应的路径里去运行批处理程序,这样窗口就不会一闪而过了,而且会提示你批处理哪里出了问题。

TOP

返回列表