两层FOR嵌套,再加IF不起作用???
本帖最后由 天堂泪吻泪 于 2010-2-5 01:33 编辑像刚刚http://www.autoitx.com/thread-12836-1-1.html这个贴子一样,通过FileExists来判断这个盘符是否存在,但对软驱和光驱的支持还不够好,所以想做一个两层FOR循环来判断,可循环做到了,但没了判断!!!!!再求大家帮助在下解答下!!!:face (35):
刚刚才那贴可以说是完美的解决了问题,而且达到了在下想要的效果,详见http://www.autoitx.com/thread-12836-1-1.html四楼!
但是在下还是想知道为什么这个二层循环中的IF会不起任何作用???
一二楼已经完美解决了这些问题了!
在下知道方法的确很多,但在下只是想用自己当前所知道的知识来解决这个问题,有什么不当之处,还请两位大大见谅!!!#include <array.au3>
$letter=_GetDriverEmptyLetter()
_ArrayDisplay($letter)
Func _GetDriverEmptyLetter()
Local $AllLetter,$Disk=DriveGetDrive("ALL")
Local $i, $j,$n = 1
$AllLetter = 0
For $i = 1 To 26
For $j=1 To $Disk
If Not ($Disk[$j]=Chr(96 + $i) & ":" )Then
$n += 1
ReDim $AllLetter[$n]
$AllLetter[$n - 1] = Chr(96 + $i) & ":"
EndIf
Next
Next
$AllLetter = $n-1
Return $AllLetter
;_ArrayDisplay($AllLetter)
EndFunc ;==>_GetDriverEmptyLetter 本帖最后由 pusofalse 于 2010-2-5 01:09 编辑
方法多如牛毛。 - -|||#include <Array.au3>
$aEmpty = _GetEmptyDrives1()
_Arraydisplay($aEmpty)
$aEmpty = _GetEmptyDrives2()
_Arraydisplay($aEmpty)
$aEmpty = _GetEmptyDrives3()
_Arraydisplay($aEmpty)
$aEmpty = _GetEmptyDrives4()
_Arraydisplay($aEmpty)
$aEmpty = _GetEmptyDrives5()
_Arraydisplay($aEmpty)
#include <WinAPI.au3>
$aEmpty = _GetEmptyDrives6()
_Arraydisplay($aEmpty)
Func _GetEmptyDrives1()
Local $sDrives, $aDrive, $sResult
$aDrive = DriveGetDrive("All")
For $i = 1 To $aDrive
$sDrives &= $aDrive[$i]
Next
For $i = 1 to 26
$sResult &= Chr(96 + $i)
Next
$sResult = StringRegExpReplace($sResult, "[" & $sDrives & "]", "")
Return StringSplit($sResult, "")
EndFunc ;==>_GetEmptyDrives1
Func _GetEmptyDrives2()
Local $aDrive, $sDrive, $sResult
$aDrive = DriveGetDrive("All")
For $i = 1 To $aDrive
$sDrive &= $aDrive[$i]
Next
For $i = 1 To 26
If Not StringInStr($sDrive, Chr(96 + $i)) Then
$sResult &= Chr(96 + $i)
EndIf
Next
Return StringSplit($sResult, "")
EndFunc ;==>_GetEmptyDrives2
Func _GetEmptyDrives3()
Local $aDrive, $sDrive, $sResult
$aDrive = DriveGetDrive("All")
For $ii = 1 To $aDrive
Assign($aDrive[$ii], 0)
Next
For $ii = 1 To 26
If Not IsDeclared(Chr(96 + $ii) & ":") Then
$sResult &= Chr(96 + $ii)
EndIf
Next
Return StringSplit($sResult, "")
EndFunc ;==>_GetEmptyDrives3
Func _GetEmptyDrives4() ; ?? Can you find BUGs on this function?
Local $sResult, $sDrive
$aDrive = DriveGetDrive("All")
For $i = 1 To 26
$sDrive &= Chr($i + 96)
Next
$sResult = "ab" & StringTrimLeft($sDrive, 2 + $aDrive)
Return StringSplit($sResult, "")
EndFunc ;==>_GetEmptyDrives4
Func _GetEmptyDrives5()
Local $aDrive, $aEnum, $sResult, $iFlags
$aDrive = DriveGetDrive("All")
For $i = 1 To 26
$aEnum &= Chr(96 + $i)
Next
$aEnum = StringSplit($aEnum, "")
For $j = 1 To $aEnum
$iFlags = 0
For $i = 1 To $aDrive
If ($aEnum[$j] & ":" = $aDrive[$i]) Then
$iFlags = 1
ExitLoop
EndIf
Next
If $iFlags = 0 Then $sResult &= $aEnum[$j]
Next
Return StringSplit($sResult, "")
EndFunc ;==>_GetEmptyDrives5
Func _GetEmptyDrives6()
Local $sResult, $hFile
For $i = 1 To 26
$hFile = _WinAPI_CreateFile("\\.\" & Chr(96 + $i) & ":", 0, 0, 0, 0, 0)
If _WinAPI_GetLastError() = 2 Then $sResult &= Chr(96 + $i)
If ($hFile > 0) Then _WinAPI_CloseHandle($hFile)
Next
Return StringSplit($sResult, "")
EndFunc ;==>_GetEmptyDrives6 本帖最后由 afan 于 2010-2-5 01:21 编辑
回复 1# 天堂泪吻泪
方法的确很多…… 这里修改LZ要求的两层For的问题#include <array.au3>
$letter = _GetDriverEmptyLetter()
_ArrayDisplay($letter)
Func _GetDriverEmptyLetter()
Local $AllLetter = , $Disk = DriveGetDrive("ALL")
Local $i, $j, $n = 1, $tmp, $ck = 0
For $i = 3 To 26 ;直接略去a、b盘
$tmp = Chr(96 + $i) & ":"
For $j = 1 To $Disk
If $tmp = $Disk[$j] Then
$ck = 1
ExitLoop
Else
$ck = 0
EndIf
Next
If $ck = 0 Then
$n += 1
ReDim $AllLetter[$n] ;LS的老大给出的最后才输出就是效率,建议修改
$AllLetter[$n - 1] = $tmp
EndIf
Next
$AllLetter = $n - 1
Return $AllLetter
EndFunc ;==>_GetDriverEmptyLetter 回复 3# afan
Quote:
;LS的老大给出的最后才输出就是效率,建议修改
——这句愣是没看懂。- -|||| 回复afan
Quote:
;LS的老大给出的最后才输出就是效率,建议修改
——这句愣是没看懂。- -| ...
pusofalse 发表于 2010-2-5 01:28 http://www.autoitx.com/images/common/back.gif
就是说您呐,先不去声明数组、ReDim之类的,用 &= 连接为字符串,最后用 StringSplit 输出 = 高效率,您老大一贯的原则“高效率” 回复 5# afan
- -|||,原谅我愚钝,现在我看懂了表面意思,afan兄内在的涵义还没弄清。
1、您?老大?为何用这样的称呼呢?
2、高效率? or “高效率”?
3、建议修改?既然是高效,为何要修改呢? 1,算啦,还是用 pusofalse 超版吧……
2,“”在这起强调的作用……
3,是建议LZ修改成你的代码,以提高效率
菜鸟我没法用编程的语言解释,只能如此了.... - - || 回复 7# afan
- -|||
原谅我愚钝至极。
抱歉至极。:face (37): 回复 8# pusofalse
哪里哪里,是超版你太过谦了.:face (32):
另外,LZ想按自己的思路完成那也是很要支持的,有创造力总比固有的思维要好。在固有好的基础上再创造可能会更好。呵呵
页:
[1]