![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-08 12:11 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » CALL 和 SET 的問題 |
| 可打印版本 1,591 / 12 |
| 第1楼 qoozen | 发表于 2008-02-01 17:46 |
| 初级用户 发帖 7 积分 22 | |
|
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 有什麼作用呢? |
|
| 第2楼 slore | 发表于 2008-02-01 17:56 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
貌似和启用延时变量的效果一样
就是让FOR循环中的SET在内部的改变有效。 |
|
| 第3楼 qoozen | 发表于 2008-02-01 18:14 |
| 初级用户 发帖 7 积分 22 | |
Originally posted by slore at 2008-2-1 05:56 PM: 多謝你的回答,但如果用setlocal enabledelayedexpansion能做到和上面的效果嗎? |
|
| 第4楼 qoozen | 发表于 2008-02-01 18:16 |
| 初级用户 发帖 7 积分 22 | |
|
Set C1=!!str1:~%%a,1!!
Set C2=!!str2:~%%a,1!! 已經試過ok了, |
|
| 第5楼 pinghu | 发表于 2008-02-12 19:06 |
| 中级用户 发帖 130 积分 307 | |
|
call set char1=%%str1:~%%i,1%%
一句实际上把set语句执行了两遍: 第一遍set char1=%str1:~0,1% 第二遍set char1=a |
|
| 第6楼 terrytong | 发表于 2008-05-06 19:10 |
| 中级用户 发帖 115 积分 240 | |
|
call set "str=%%str:%char1%=%char2%%%"
谁能详细解释一下这句啊。不胜感激... |
|
| 第7楼 bat-zw | 发表于 2008-05-06 19:24 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
运行以下代码你就明白了: |
|
| 第8楼 moniuming | 发表于 2008-05-06 20:16 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
Originally posted by terrytong at 2008-5-6 19:10: 我是在别的地方看到的,现在奉献出来:) 使用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%%%%%% 举个例子加深印象: |
|
| 第9楼 HAT | 发表于 2008-05-06 20:22 |
| 版主 发帖 5,017 积分 9,023 | |
|
willsort 兄对逃逸字符的讲解也许对楼主有帮助。
|
|
| 第10楼 joyn | 发表于 2008-05-06 23:16 |
| 中级用户 发帖 105 积分 280 来自 广西 | |
|
call,set..这些我不太明白哪里有参考资料?可否贡献一下
|
|
| 第11楼 terrytong | 发表于 2008-05-07 15:16 |
| 中级用户 发帖 115 积分 240 | |
Originally posted by moniuming at 2008-5-6 20:16: 你举的例子我能看的懂,但是 "str=%str:a=A%" 把单个分号的用变量替换,怎么得到 "str=A" ? 应该是"str=a:a=A 啊。 不好意思。见笑了。 |
|
| 第12楼 moniuming | 发表于 2008-05-07 17:36 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
|
环境变量替换已如下增强:
%PATH:str1=str2% 会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。 要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。 "str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的 开始到 str1 剩余部分第一次出现的地方,都一直保持相配。 |
|
| 第13楼 jia332 | 发表于 2008-05-21 09:19 |
| 初级用户 发帖 81 积分 160 | |
|
那位有这方面的资料,能否共享一下,让小弟系统的学习一下
十分感谢 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |