中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-05 21:24
48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 输出for中增强变量的问题
可打印版本  764 / 9
第1楼 yoyodos 发表于 2007-09-22 22:51
初级用户 发帖 59 积分 128
输出for中增强变量的问题
想输出for增强变量的不同结果。

@echo off
setlocal enabledelayedexpansion
for %%a in (f d p n) do (
for %%k in (test.txt) do echo %%~%%ak
)
pause

我把%%a替换成f就没有问题,但是用变量就不可以,为什么啊?

[ Last edited by yoyodos on 2007-9-23 at 10:12 AM ]
第2楼 scriptor 发表于 2007-09-23 00:05
银牌会员 发帖 555 积分 1,187
Originally posted by yoyodos at 2007-9-22 22:51:
想输出for增强变量的不同结果。

@echo off
setlocal enabledelayedexpansion
for %%a in (f d p n) do (
for %%k in (test.txt) do echo %%~%%ak;)
)
pause

我把%%a替换成f就 ...



看这个啊::



以后碰到类似的问题,就用call跳转吧!
这也不失是一种解决办法,而且有时会使得代码清晰.
呵呵...太多的call就看着头晕啊..小心!
第3楼 yoyodos 发表于 2007-09-23 10:11
初级用户 发帖 59 积分 128
谢谢拉,我试了半天都不行,看来以后得多考虑用call,哈哈,虽然这里面的道理还不懂。。。
第4楼 scriptor 发表于 2007-09-23 12:27
银牌会员 发帖 555 积分 1,187
call /?

再搜索: 变量延迟
第5楼 lzmuhioin 发表于 2007-09-23 23:13
初级用户 发帖 24 积分 51
请问scriptor兄:
%%~%1k这个是什么意思,我知道~是变量偏移,但我这里就看不懂了,费解!
能解释一下吗?>?
我同时也试了两次,确实,是需要加CALL才行,CALL在这里起到了什么作用呢?

[ Last edited by lzmuhioin on 2007-9-23 at 11:14 PM ]
第6楼 yoyodos 发表于 2007-09-23 23:28
初级用户 发帖 59 积分 128
哈哈,%%~%%ak 和 echo %%~%1k 这两个变量使用可以说完全一样得。
只是第一个程序用了变量来表示(%%a),第二个程序用一个形式参数来表示(%1)。这是我能看出来唯一得差别了。

结论:%%~fi这样的变量不能用变量来替代“f”。
不知道我这样理解对不对? ^_^
第7楼 scriptor 发表于 2007-09-24 00:30
银牌会员 发帖 555 积分 1,187
是这样的,可以这么理解

你可以搜索call的用法
因为我不是搞计算机的
也不是学编程的
对于细节我不甚了解

call "呼叫"----> "调用" 后面有标号 ":xxxx"----->这个就是标号 标号后可以接参数 a b c ...
至于多少个,我不知道,是不是10个,还是N个,我不清楚.

call 后面还可以接上 脚本外的文件 如: a.txt
这时,源程序就暂停,知道你关闭a.txt

call并不中断源程序,call后面一旦执行完,返回原程序, 这时返回的可以是空,也可以有子程序的值------>子程序或源程序中被call调用的标号下的程序返回值

我就知道这么多
你多搜索,多用它,也能体会到的
第8楼 yoyodos 发表于 2007-09-24 11:08
初级用户 发帖 59 积分 128
我对类似于 %%~%%ak 这样变量里面含有变量的,还有类似这样的 set str=!str:变量1=变量2! 变量含变量的就看着晕,还有变量延迟的范围也有点晕,scriptor兄有啥经验没?哈哈
第9楼 scriptor 发表于 2007-09-26 00:58
银牌会员 发帖 555 积分 1,187
不是太清楚
像set str=!str:变量1=变量2!
我没有使用过

经验是死的: 我一般就是%a% 不行 就!a!
还不行,干脆就 call

你可以请教版上的高人们
我只是知道一点点的
经验很有限的
第10楼 yoyodos 发表于 2007-09-26 01:06
初级用户 发帖 59 积分 128
恩,谢谢哦,学习了下变量延迟还是有点收获的
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023