|
qzwqzw
银牌会员
     天的白色影子
积分 2343
发帖 636
注册 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 楼』:
|

|
|
2008-1-24 20:24 |
|
|
ZJHJ
高级用户
   
积分 609
发帖 374
注册 2006-8-2
状态 离线
|
『第
3 楼』:
我也经常遇到执行带有wmic的命令时,确实有不响应的情况,重新执行命令又会正常.
不知道为什么?还有,执行带有wmic的命令时,磁盘会响.遇这种不稳定情况,我不得不
绕道走.
|
|
2008-1-24 20:45 |
|
|
qzwqzw
银牌会员
     天的白色影子
积分 2343
发帖 636
注册 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 |
|