Board logo

标题: [讨论]WMIC的产生的临时文件 [打印本页]

作者: qzwqzw     时间: 2008-1-24 20:14    标题: [讨论]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 ]

作者: fastslz     时间: 2008-1-24 20:24
哈哈是不是和我一样啊,检查批处理set /p
http://www.cn-dos.net/forum/viewthread.php?tid=37191&fpage=4

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

作者: qzwqzw     时间: 2008-1-24 20:50
这种情况与我的情况是有区别的
我的情况很可能是源于自定义句柄的“污染”
见2楼的讨论

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

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

作者: fastslz     时间: 2008-1-24 22:03
@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默认的,问题可能还是某命令重定向问题

作者: everest79     时间: 2008-1-25 04:29
wmic的临时文件是由管道产生的
wmic会将管道符的字符流重新定义到当前目录下的文件中,再通过类似wmic <temp.bat 来执行

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