本帖最后由 lynfr8 于 2009-6-9 18:20 编辑
你对脚本运算时间和系统时间还有IniWrite的用法理解不够深
1.IniWrite ( "文件名", "字段名", "关键字", "值" )
其中参数‘值’为要写入/修改的数值.
当目标文件并不存在,则程序将自动创建该文件,关键字和字段将被添加到后面部分
好好读读这句话:
可得知IniWrite是先写入关键字和字段,然后再读字段,再根据字段写入相应的‘值’
如果字段是存在的话,
IniWrite只会执行修改‘值’,而不会再建同样一个字段再写入值(好好理解这里!)
不信?检测下就知道了$cppf = DriveGetDrive("FIXED")
$sxdx = @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & ":" & @MIN & ":" & @SEC
If Not @error Then
For $i = 1 To $cppf[0]
Local $pf
$pf = $cppf[$i]
$kj = DriveSpaceTotal($pf & "")
Sleep(1000)
$kykj = DriveSpaceFree($pf & "")
Sleep(1000)
IniWrite(@ScriptDir & "\空间.ini", "磁盘空间" , "检测时间 ", $pf & "盘 全部空间为: " & $kj & " 可用空间为: " & $kykj)
Next
EndIf
看,是不是加了sleep都没用,还是只能获得最后一个盘符的检测数据?
看回到你的代码:"检测时间 " & $sxdx,$sxdx是你获取的系统时间,精确到秒了
在循环语句里,你的思路是循环获取系统时间然后和‘检测时间’一起写入字段,然后和相应的值写入ini,思路是对的
问题就出现在脚本的循环语句运算速度是非常快的,比你获得的系统时间秒还要快得多了
想想cpu浮点运算速度就知道了,如果是双核的甚至是8核的就更不用说了
这样你的循环语句获得的系统时间是相同的,写入的字段也是一样的
自然IniWrite就只执行‘值’的修改,导致你得到最后一个盘符的检测数据了!
但是当你就加入sleep之后,获取的系统时间就不同了,
只要slepp(100)1秒以上IniWrite都会执行‘值’的写入而不是修改,
因为你的字段已经可以根据系统时间区分开来了
2.不加sleep的解决方法
关键:修改IniWrite语句中的字段IniWrite(@ScriptDir & "\空间.ini", "磁盘空间" , $i&"检测时间 "& $sxdx, $pf & "盘 全部空间为: " & $kj & " 可用空间为: " & $kykj)
或者用比秒更精确的TimerDiff来区分时间$cppf = DriveGetDrive("FIXED")
$sxdx = @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & ":" & @MIN & ":" & @SEC
If Not @error Then
For $i = 1 To $cppf[0]
Local $pf,$dif
$begin = TimerInit()
$pf = $cppf[$i]
$kj = DriveSpaceTotal($pf & "")
$kykj = DriveSpaceFree($pf & "")
$dif = TimerDiff($begin)
IniWrite(@ScriptDir & "\空间.ini", "磁盘空间" , "检测时间 "&$sxdx&$dif, $pf & "盘 全部空间为: " & $kj & " 可用空间为: " & $kykj)
Next
EndIf
有时候,细细琢磨帮助文件的定义是非常有帮助的... |