中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: CALL 和 SET 的問題 上一主题 | 下一主题
qoozen
初级用户




积分 22
发帖 7
注册 2008-1-20
状态 离线
『楼 主』:  CALL 和 SET 的問題

set str1=abcdefghijklmnopqrstuvwxyz set str2=ABCDEFGHIJKLMNOPQRSTUVWXYZ :main cls set str= set /p str= 請輸入字符串(退出請直接按回車): if not defined str exit cls echo. echo 轉換前:"%str%" echo. for /l %%i in (0,1,25) do ( call set char1=%%str1:~%%i,1%% call set char2=%%str2:~%%i,1%% call :change ) echo ____________________________________________ echo. echo 轉換後:"%str%" echo. echo 按任意鍵進行下一次演示... pause>nul goto main :change call set "str=%%str:%char1%=%char2%%%" goto :eof 想問問Call Set xxxx 有什麼作用呢?


2008-2-1 17:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

貌似和启用延时变量的效果一样 就是让FOR循环中的SET在内部的改变有效。


2008-2-1 17:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qoozen
初级用户




积分 22
发帖 7
注册 2008-1-20
状态 离线
『第 3 楼』:  

Originally posted by slore at 2008-2-1 05:56 PM: 貌似和启用延时变量的效果一样 就是让FOR循环中的SET在内部的改变有效。
多謝你的回答,但如果用setlocal enabledelayedexpansion能做到和上面的效果嗎?


2008-2-1 18:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qoozen
初级用户




积分 22
发帖 7
注册 2008-1-20
状态 离线
『第 4 楼』:  

Set C1=!!str1:~%%a,1!! Set C2=!!str2:~%%a,1!! 已經試過ok了,


2008-2-1 18:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 5 楼』:  

call set char1=%%str1:~%%i,1%% 一句实际上把set语句执行了两遍: 第一遍set char1=%str1:~0,1% 第二遍set char1=a


2008-2-12 19:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terrytong
中级用户





积分 240
发帖 115
注册 2008-3-10
状态 离线
『第 6 楼』:  

call set "str=%%str:%char1%=%char2%%%" 谁能详细解释一下这句啊。不胜感激...


2008-5-6 19:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 7 楼』:  运行以下代码你就明白了:

@echo off
set a=123456789
echo a=%a%
set b=%a:~,4%&set c=%a:~5,4%
echo b=%b% c=%c%
echo call,set a=%%a:%b%=%c%%%
call,set a=%%a:%b%=%c%%%
echo a=%a%
pause>nul




批处理之家新域名:www.bathome.net
2008-5-6 19:24
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 8 楼』:  

Originally posted by terrytong at 2008-5-6 19:10: call set "str=%%str:%char1%=%char2%%%" 谁能详细解释一下这句啊。不胜感激...
我是在别的地方看到的,现在奉献出来:) 使用call进行变量延迟遵循以下两个步骤的替换,有n个call,就进行n+1次替换 1.如果分号的数量为单(只看一边),则把最里面的分号用变量替换 2.把双数的分号去掉一半(只看一边) call set "str=%%str:%char1%=%char2%%%" 比如输入的是"a",转换过程如下(有1个call,则进行2次替换,每次有两个步骤): 1.(1)把单个分号的用变量替换,得 "str=%%str:a=A%%" (2)把双数的分号去掉一半,得 "str=%str:a=A%" 2.(1)把单个分号的用变量替换,得 "str=A" (2)把双数的分号去掉一半,由于没有分号了,故为A 其实在本例中,可以不用call :change的,用下面一句代替也完全可以达到同样效果: call call set str=%%%%str:%%char1%%=%%char2%%%%%% 举个例子加深印象:
@echo off
set "a=cn-dos"
set "b=a"
set "c=b"
set "d=c"
echo %a%
call echo %%%b%%%
call call echo %%%%%%%c%%%%%%%
call call call echo %%%%%%%%%%%%%%%d%%%%%%%%%%%%%%%
pause


   此帖被 +2 点积分      点击查看详情   
评分人:【 ngd 分数: +2  时间:2008-5-14 21:07


2008-5-6 20:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 9 楼』:  

willsort 兄对逃逸字符的讲解也许对楼主有帮助。


2008-5-6 20:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
joyn
中级用户

丶杏灬丶


积分 280
发帖 105
注册 2008-5-6
来自 广西
状态 离线
『第 10 楼』:  

call,set..这些我不太明白哪里有参考资料?可否贡献一下


2008-5-6 23:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terrytong
中级用户





积分 240
发帖 115
注册 2008-3-10
状态 离线
『第 11 楼』:  

Originally posted by moniuming at 2008-5-6 20:16: 我是在别的地方看到的,现在奉献出来:) 使用call进行变量延迟遵循以下两个步骤的替换,有n个call,就进行n+1次替换 1.如果分号的数量为单(只看一边),则 ...
你举的例子我能看的懂,但是 "str=%str:a=A%" 把单个分号的用变量替换,怎么得到 "str=A" ? 应该是"str=a:a=A 啊。 不好意思。见笑了。


2008-5-7 15:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 12 楼』:  

环境变量替换已如下增强: %PATH:str1=str2% 会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。 要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。 "str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的 开始到 str1 剩余部分第一次出现的地方,都一直保持相配。


2008-5-7 17:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jia332
初级用户





积分 160
发帖 81
注册 2006-7-27
状态 离线
『第 13 楼』:  

那位有这方面的资料,能否共享一下,让小弟系统的学习一下 十分感谢


2008-5-21 09:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: