[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [求助]set的替换字符功能怎么用?

我为了练习for写了这么一句
  1. for %%a in (a123,a465,a789) do (
  2. set b=%%a
  3. set c=%b:a=a被替换%
  4. echo %C%
  5. )
  6. pause
复制代码

但是最后输出的%c%是空的。
我认为是变量延时的问题就改成这样:
  1. setlocal enabledelayedexpansion
  2. for !!a in (a123,a465,a789) do (set b=!!a
  3. set c=!b:a=a被替换!
  4. echo !C!
  5. )
  6. pause
复制代码

但结果使我更无奈:批处窗口一闪而过~~~~~失败~~~~~~
为什么会这样啊?
还请大家指点指点!!!!

原帖由 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

LS的要知道哪里出错了,用我那个批处理测试器不就好了么,运行完自动把出错日志给你看。。。

TOP

for 的变量没有 !!a 这种用法,只能用百分号。

for %%a in () do ()

TOP

原帖由 defanive 于 2009-2-4 12:43 发表
LS的要知道哪里出错了,用我那个批处理测试器不就好了么,运行完自动把出错日志给你看。。。



对啊 !!!!
有没有在批处命令写错时,使窗口不要关掉并输出错误信息的命令啊 ??????
不然对新手来说,一出错就把窗口关掉,连怎么回事都不知道,真的很麻烦~~~~~

TOP

回复 5楼 的帖子

放在cmd里运行就可以了,我从来都在里面运行. . .
setlocal enabledelayedexpansion

TOP

返回列表