![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-08 20:13 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [讨论]在()内的调用批处理 |
| 可打印版本 1,000 / 12 |
| 第1楼 qzwqzw | 发表于 2008-01-24 20:47 |
| 银牌会员 发帖 636 积分 2,343 | |
|
[讨论]在()内的调用批处理 先给个示例
猜猜它的输出是什么?
这个test 1的出现让我又一次见识了()的威力 |
|
| 第2楼 slore | 发表于 2008-01-24 23:11 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
写那么复杂干什么?
@echo off for %%f in (test) do ( echo test 2 echo test 1 ) echo test 3 看样子只运行括号里面的,试了pause证实了^应该试FOR的缘故? |
|
| 第3楼 qzwqzw | 发表于 2008-01-25 00:14 |
| 银牌会员 发帖 636 积分 2,343 | |
|
你没明白我的示例要表达的意思
通常情况下 直接调用批处理是不会返回的 也就是说被调用的批处理之后语句不会执行 但是被当这些语句被()包含后 cmd的解释过程有些变化 在()之内的所有语句都被执行了 下面的代码也是同样的道理 这与for没有什么关系 |
|
| 第4楼 everest79 | 发表于 2008-01-25 04:16 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
()内的命令被视为一行,处理时是一次性读取的,不带()时按文本行来读取
看来批处理中执行批处理默认为跳转 |
|
| 第5楼 plp626 | 发表于 2008-01-25 11:08 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
所谓的小问题背后有大学问.
看来,小测试能反应根本原理. cmd总是整句解释执行, 我看括号里调用bat就等同于call子过程, 调完返回! 讨论下: 对复合句的预处理机制? 单进程? 不知道大家联系到什么? 还有变量的预处理机制? 考考大家: 不测试能直接说出下面代码的打印结果吗? |
|
| 第6楼 zh159 | 发表于 2008-01-25 11:16 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
和我想象的一样,优先处理转义符
|
|
| 第7楼 qzwqzw | 发表于 2008-01-25 12:13 |
| 银牌会员 发帖 636 积分 2,343 | |
我看括号里调用bat就等同于call子过程, 调完返回! 二者并不等同 如果上述的代码换成call会输出test 3的 而直接调用并不会输出 也就是说调用后仍不返回 只不过因为()内的代码与调用代码同属一个整句 所以一同被执行了 |
|
| 第8楼 plp626 | 发表于 2008-01-25 13:33 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
嗯,还是楼主细心,考虑的全面.学习
|
|
| 第9楼 everest79 | 发表于 2008-01-25 14:17 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
这应是一个真正的bug
直接在批处理中执行一个批处理,执行时没有调用新的cmd来或子进程,而是占用了或跟旧批处理在平行子进程中,当新批处理执行完后类似:eof的状态将cmd的输入终止了 |
|
| 第10楼 qzwqzw | 发表于 2008-01-25 14:22 |
| 银牌会员 发帖 636 积分 2,343 | |
|
everest79:
我在讨论()的特性 你却在讲调用批处理的bug 直接调用批处理不返回 不是一个bug 而是从DOS时代就存在的一个特性 这与直接调用其它类型程序文件并不相同 有时候我们很需要这个特性 |
|
| 第11楼 plp626 | 发表于 2008-01-25 14:40 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
问一句:
为什么在bat中直接调用(不是call,而是直接输入要调用的batch的路径)bat会将进程转到要调用的bat,当被调用的bat结束后,"主"bat后面的语句不被执行 表达不好,拿代码说吧: @echo off echo echo 123 >1.bat 1.bat pause 这个代码直接就一闪然后退出了(显示123) 而这个代码 @echo off echo echo 123 >1.bat 1.txt pause 它会显示"按任意键继续..." 莫非这还有个进程优先级之分... |
|
| 第12楼 everest79 | 发表于 2008-01-25 15:33 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
哦
|
|
| 第13楼 plp626 | 发表于 2008-01-25 19:27 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
你们令我失望了,有这么难吗?
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |