![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 09:25 |
共 48,040 主题排行 / 350,125 发帖 / 今日 0 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 被一个 Wimc 低级 BUG 郁闷N天 |
| 可打印版本 3,487 / 17 |
| 第1楼 fastslz | 发表于 2008-01-20 19:06 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
被一个 Wimc 低级 BUG 郁闷N天 BUG症状光标闪烁批处理被中断,环境WinXP SP2,我原来的批处理代码很长,挖出这个臭虫用了N天,本以为代码某部分不稳定,原来被这个低级臭虫整了,真郁闷~ 大家以后注意 set /p= <nul>name.txt和wmic在同一批处理中使用 |
|
| 第2楼 everest79 | 发表于 2008-01-21 01:20 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
你工作目录下应新生成了一个批处理吧?
|
|
| 第3楼 everest79 | 发表于 2008-01-21 01:25 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
set /p=%keyname%<nul>name.txt
跟上copy con file与more也是这种情况,不过wmic会将输入当成一个脚本 |
|
| 第4楼 fastslz | 发表于 2008-01-21 12:47 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
当前目录没生成批处理。
本来只是用set/p生成一个不带换行符的文本,没想到此后wmic任何参数不起作用了。 |
|
| 第5楼 fastslz | 发表于 2008-01-21 12:58 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
解决方法
|
|
| 第6楼 fastslz | 发表于 2008-01-21 13:52 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
看来问题还是出在set/p参数方面
|
|
| 第7楼 everest79 | 发表于 2008-01-22 13:28 |
| 金牌会员 发帖 1,127 积分 2,564 | |
Originally posted by fastslz at 2008-1-21 12:47 PM: 不是不启作用了,而是几次重定向后不知为何激活了wmic打控制台获取输入 你可以在命令行下输入然后以ctrl+z终止就会产生一个wmic的临时性脚本文件 只要有打控制台接收数据功能的命令都会在这样的批处理下产生这样的错误 按你的批处理我觉得有这种功能的命令都有一个潜在的句柄,这个句柄是命令自定义的,主要来完成管道传输 |
|
| 第8楼 vkill | 发表于 2008-01-22 13:50 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
这样也可以啊
所以我写>file时都把>写在前面 |
|
| 第9楼 vkill | 发表于 2008-01-22 13:51 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
楼主的精神值得鼓励
|
|
| 第10楼 qzwqzw | 发表于 2008-01-24 20:34 |
| 银牌会员 发帖 636 积分 2,343 | |
这是我在另一篇主题帖的发言 是在没有看此主题之前 现在综合两个主题的讨论 我觉得很像是自定义句柄的问题 也即是说wmic很可能使用了3-9中的某个自定义句柄 而此时如果使用set /p,copy con或者管道操作时 会有很大概率将这个自定义句柄“污染” 导致wmic的输入被转向控制台 而且这样的“污染”是在一个命令行会话中全局有效的 与此相关的讨论见 http://www.cn-dos.net/forum/viewthread.php?tid=16942 [ Last edited by qzwqzw on 2008-1-24 at 08:36 PM ] |
|
| 第11楼 fastslz | 发表于 2008-01-24 20:40 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
everest79也说了会产生一个临时文件的,而我这里没发现临时文件,看来是另一种“句柄污染”wmic对管道符特别敏感
|
|
| 第12楼 terse | 发表于 2008-01-24 21:02 |
| 银牌会员 发帖 946 积分 2,404 | |
|
这样就可以继续
@echo off set keyname=微软真垃圾 set /p=%keyname%<nul>name.txt START wmic /? |
|
| 第13楼 qzwqzw | 发表于 2008-01-24 21:12 |
| 银牌会员 发帖 636 积分 2,343 | |
|
这样的代码说明问题与set /p无关 而是与代码中出现的两个重定向符号<和>有关 这与http://www.cn-dos.net/forum/viewthread.php?tid=16942中的讨论就对应的上了 12楼的start是新开了命令行会话 问题自然可以解决 但通常意义不大 因为我们很难把wmic的输出传回至原命令行会话 [ Last edited by qzwqzw on 2008-1-24 at 09:16 PM ] |
|
| 第14楼 fastslz | 发表于 2008-01-24 21:29 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
从6楼可以看出
@echo off >nul s<nul echo test wmic /? pause 这样重定向就不会出现这样的情况 |
|
| 第15楼 qzwqzw | 发表于 2008-01-24 22:36 |
| 银牌会员 发帖 636 积分 2,343 | |
|
具体的原因肯定与WMIC内部的处理机制有关
从那个TempWmicBatchFile.bat可以看出其中的端倪 不过无论如何 我们不能因为wmic而不使用<nul>nul的句式 所以使用下面的方法应该在批处理中有效的 wmic /?<nul 或者 cd.|wmic /? 这样不用管脚本前面使用了那些自定义句柄 都保证wmic所用的都是一致的 但是在命令行下运行cd.|wmic /?提示 Win32 错误: 另一个程序正在使用此文件,进程无法访问。 很有意思的提示! |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |