中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [讨论]WMIC的产生的临时文件 上一主题 | 下一主题
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『楼 主』:  [讨论]WMIC的产生的临时文件

我在一个批处理中使用下面代码获取磁盘空间
wmic logicaldisk get DeviceID,FreeSpace,Size | findstr "%_Drives%"

但是发现程序某些时刻运行时会失去响应
此时在当前命令行下直接运行以下代码也会失去响应
wmic logicaldisk get DeviceID,FreeSpace,Size

在输入一个Ctrl+Z和一个回车后会继续输出执行结果
此时会在当前路径下产生一个零字节的文件
TempWmicBatchFile.bat

此时另开一个命令行环境
当前路径相同
执行此代码无问题

与此相关的问题也出现使用脚本操作diskpart列磁盘分区时
此时只能Ctrl+Break终止代码执行

怀疑是这些命令在执行时会锁定一些卷
而如果在这些命令上使用管道
而命令的管道管道需要在%TMP%产生临时文件
而如果%TMP%所在卷恰被锁定
则临时文件无法建立在这个卷上建立
管道操作就无法完成
管道后的命令输入被转向控制台
而输入Ctrl+Z加回车后正是结束控制台输入

当然目前为止这只是猜测……

[ Last edited by qzwqzw on 2008-1-24 at 08:24 PM ]

2008-1-24 20:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 2 楼』:  

哈哈是不是和我一样啊,检查批处理set /p
http://www.cn-dos.net/forum/viewthread.php?tid=37191&fpage=4



第一高手    第二高手

2008-1-24 20:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 3 楼』:  

我也经常遇到执行带有wmic的命令时,确实有不响应的情况,重新执行命令又会正常.
不知道为什么?还有,执行带有wmic的命令时,磁盘会响.遇这种不稳定情况,我不得不
绕道走.

2008-1-24 20:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 4 楼』:  

这种情况与我的情况是有区别的
我的情况很可能是源于自定义句柄的“污染”
见2楼的讨论

而你的情况则属于wmic自身的问题
很有可能是没有用where、get子句限定某些数据量较大的查询
导致wmic类SQL的查询严重消耗系统资源
比如在wmic中单独使用NTDOMAIN的别名时

[ Last edited by qzwqzw on 2008-1-24 at 08:54 PM ]

2008-1-24 20:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 5 楼』:  

@echo off
>test.x  echo /APPEND:disk.txt
>>test.x echo logicaldisk get DeviceID,FreeSpace,Size
>>test.x echo quit
wmic.exe<test.x
pause

这样看来TempWmicBatchFile.bat是WMIC默认的,问题可能还是某命令重定向问题



第一高手    第二高手

2008-1-24 22:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 6 楼』:  

wmic的临时文件是由管道产生的
wmic会将管道符的字符流重新定义到当前目录下的文件中,再通过类似wmic <temp.bat 来执行

例如echo process|wmic
会先产生文件tempwmicbatchfile.bat,然后将这个文件输入wmic,所以执行时因在结尾会有两个回车符而出现两次错误提示,这大概是wmic的一种批处理保障,避免按行来执行wmic命令,节省系统资源

2008-1-25 04:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: