标题: [文本处理] 这是不是变量延迟的BUG [打印本页]
作者: canyuexiaolang 时间: 2009-8-28 16:00 标题: 这是不是变量延迟的BUG
复制代码
做题时,运用了变量延迟,输入a本应出来m而它却出来j认真的找了原因,吓我一跳,代码如下- @echo off&setlocal EnableDelayedExpansion
- set /p a=
- for /f %%i in ("%a%") do (
- set n=%%i
- set n=!n:a=m!
- set n=!n:b=b!
- set n=!n:c=e!
- set n=!n:d=w!
- set n=!n:e=q!
- set n=!n:f=c!
- set n=!n:g=i!
- set n=!n:h=r!
- set n=!n:i=o!
- set n=!n:j=\!
- set n=!n:k=z!
- set n=!n:l=l!
- set n=!n:m=u!
- set n=!n:n=l!
- set n=!n:o=f!
- set n=!n:p=a!
- set n=!n:q=k!
- set n=!n:r=t!
- set n=!n:s=x!
- set n=!n:t=s!
- set n=!n:u=j!
- set n=!n:v=v!
- set n=!n:w=p!
- set n=!n:x=\!
- set n=!n:y=g!
- set n=!n:z=\!
- )
- echo %n%
- pause
复制代码
它竟把a→m,而m→u,接着u→j在输出("\"是我没找到匹配的英文)
究竟怎么样才能使a变为m在直接输出呢
[ 本帖最后由 canyuexiaolang 于 2009-8-28 16:03 编辑 ]
作者: canyuexiaolang 时间: 2009-8-28 16:26
- @echo off&setlocal EnableDelayedExpansion
- for /f %%i in (b.txt) do (
- set n=%%i
- set n=!n:!!=%!
- )
- echo %n%>c.txt
- pause
复制代码
运行之后竟然在c.txt中写入复制代码
难道变量延迟,还能延迟吗
有点晕
作者: canyuexiaolang 时间: 2009-8-28 16:29
还有
b.txt
是一堆我乱打的东西
目的是把里面的 "!" 替换成 "%"
但是如果写一个"!"复制代码
改为复制代码
在c.txt会出现 "="
PS:没引号
作者: canyuexiaolang 时间: 2009-8-28 19:16
有没有人知道啊,BATHOME好象没原来热闹了,冷清了许多
作者: tireless 时间: 2009-8-28 19:36
匹配变量时是从左至右的,所以:
变量 n 的值=变量 n: 的值变量 = 的值 (好像没办法用等号作为变量名)
同样的:
作者: canyuexiaolang 时间: 2009-8-28 19:46
那怎么替换呢...
作者: tireless 时间: 2009-8-28 20:13 标题: 回复 6楼 的帖子
不太明白你 1 楼的意思。如果把 set n=!n:a=m! 放到最后替换,变量的值里的 a 会被替换为 m
作者: canyuexiaolang 时间: 2009-8-28 20:28
唉
但把它放到最后,那其他的也会变成m的
就是如果
b=a
a=m
最后b也会等于m
作者: tireless 时间: 2009-8-28 23:36
- @echo off
- set "r=a.m b.b c.e d.w e.q f.c g.i h.r i.o j.、 k.z l.l m.u n.l o.f p.a q.k r.t s.x t.s u.j v.v w.p x.、 y.g z.、"
- setlocal EnableDelayedExpansion
- set /p a=input:
- set n=!a!
- for %%a in (!r!) do set n=!n:%%~na=%%~na!
- for %%a in (!r!) do set n=!n:%%~na=%%~xa!
- set n=!n:.=!
- set n=!n:、=\!
- echo;!n!
- pause
复制代码
[ 本帖最后由 tireless 于 2009-8-28 23:39 编辑 ]
作者: canyuexiaolang 时间: 2009-8-29 07:09
可以啊,哇,你是怎么做到的呢
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |