![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 12:30 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 为什么在if中被比较的变量不加引号就不能直接截取呢? |
| 可打印版本 833 / 8 |
| 第1楼 Hanyeguxing | 发表于 2009-09-19 06:35 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
为什么在if中被比较的变量不加引号就不能直接截取呢? 1,有这样一个变量,他是由数字构成,前面为若干个0,去掉这些0,我可以用这样的方法:批处理1
2,因为这里使用了call和两个标签,我想换一个方法,通过00=0来判断。 测试:批处理2 运行结果: 不等1 不等2 不等3 不等4 不等5 等于6 所以,使用 equ 及不使用引号,就可以实现比较时000等于0。 3,于是,做了一个这样的批处理:批处理3 出现错误:此时不应有 %k!。 只能写成这样才可以:批处理4 运行正常 或者是:批处理5 运行正常 为什么在这里(批处理3),不使用引号就不能直接截取!E:~0,%%k!呢? [ Last edited by Hanyeguxing on 2009-9-19 at 06:57 ] |
|
| 第2楼 wxcute | 发表于 2009-09-19 11:16 |
| 中级用户 发帖 211 积分 458 | |
|
F话不多说,自己研究更有成就。 在逗号前加个转义符,变成:^,
|
|
| 第3楼 everest79 | 发表于 2009-09-20 09:05 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
if 不支持变量二次扩展
|
|
| 第4楼 q8249014 | 发表于 2009-09-20 09:05 |
| 初级用户 发帖 45 积分 175 | |
|
2f说的是对的,可是没有说明原因
先请楼主运行以下代码 可见以上两段代码执行的结果都是一样的 代码中没有用"echo off" 楼主可以把cmd屏幕中的命令行和以上代码比较一下 就会发现cmd在预处理的时候会把IF后需要比较字符中的某些特殊字符过滤掉。 通过比较cmd屏幕回显中的命令可以发现实际上连段代码执行的都是 "if 1 EQU 1 echo ok" 所以上面两段代码的执行结果才会一样 在你的代码中 加上"^"就把","转义为普通字符 所以 就成功啦 类似的字符还有";" 还有什么特殊字符lz有兴趣自己找一下 o(∩_∩)o... 那么lz的代码就应该变为以下代码 或者可以这样理解 我们知道","在批处理中起分隔符的作用 那么 " if !E:~0^,%%k! equ 0 set E=!E:~%%k!" 就变成了 "if !E:~0 %%k! equ 0 set E=!E:~%%k!" 请执行 也就是说空格(分隔符)后面应该为比较运算符 而你却写成了 %%k! 它自然就报错了 我想试完以上代码 你应该就明白了 o(∩_∩)o... [ Last edited by q8249014 on 2009-9-20 at 11:10 ] |
|
| 第5楼 everest79 | 发表于 2009-09-20 13:52 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
.....
if %a:~0^,1% equ 1 echo ok if %a:~0,1% equ 1 echo ok 自已测试下 |
|
| 第6楼 Hanyeguxing | 发表于 2009-09-21 04:08 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
为什么只有!!内才需要这样,%%内就不需要。。。。。。 |
|
| 第7楼 plp626 | 发表于 2009-09-21 04:09 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
预处理时,,;=空格(共四个)被作为参数分隔符了,
|
|
| 第8楼 everest79 | 发表于 2009-09-21 04:14 |
| 金牌会员 发帖 1,127 积分 2,564 | |
Originally posted by everest79 at 2009-9-20 09:05: 这样 |
|
| 第9楼 q8249014 | 发表于 2009-09-21 06:27 |
| 初级用户 发帖 45 积分 175 | |
|
回6f:
运行以上代码 看CMD屏幕中的代码 可以发现 执行的是 "if 1 EQU 1 echo 相等8" 其实还是CMD预处理的问题 %%的优先级比!!高 在预处理时(命令执行之前) %a:~0,1%就被替换为1了 所以不会出错 关于这个"优先级"的问题 以前 bjsh版主讨论过这个问题 以下是bjsh版主写的那篇帖子 http://www.cn-dos.net/forum/viewthread.php?tid=30884&fpage=1&highlight=%2Bbjsh |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |