2014-01-30 1 views
1

컴퓨터의 모든 사용자 프로필을 구문 분석하고 디렉토리의 내용을 검사하는 스크립트를 작성하고 있습니다. 디렉토리 내용에 따라 특정 폴더가 삭제 될 수 있습니다. 나는_FileListToArray를 사용하는 @error 값

C:\Users\<Username>\AppData\Roaming\schlumberger\Petrel. 

@error의 값을 확인하는 IF 문 내의 모든 폴더에 읽기 _FileListToArray를 사용하고 각 사용자에 대해 는 빈 배열을 잡기 위해 사용되는 (아무 폴더

C:\Users\<UserName>\AppData\Roaming\schlumberger\Petrel 
에 포함되지

또는 디렉토리가 존재하지 않습니다. 아래 함수를 실행하면 @error 값이 0이지만 IF 조건이 true로 평가되므로 루프가 종료됩니다. 예를 들어 IF 조건을 @error = 4이 아닌 4 또는 1로 변경하면 사용자 프로필 중 하나가 schlumberger 디렉터리가없는 구문 분석 될 때까지 모든 것이 의도 한대로 작동합니다. 이 콘솔에서 다음과 같은 출력 제공 : 의도 한대로 나는 그 특정 사용자에 대한 디렉토리를 작성하는 경우

Variable must be of type "Object".

를, 모든 작동합니다.

궁극적으로 내 문제는 @error이 0 만 반환한다는 것입니다. 그러나 1 & 4를 찾고있는 IF 문에서 @error의 값을 평가하면 진술이 사실 일 때가 있습니까?

Func DeleteDirectories($userList) 

If $debug = True Then ConsoleWrite(@CR & 'Function: DeleteDirectories') 

;_ArrayDisplay($userList) 
For $userElement in $userList 
    ; debug ------------------------------------------------------------------------------ 
    ConsoleWrite(@CR & 'Number of user profiles found = ' & $userList[0]) 
    ConsoleWrite(@CR & '$userElement = ' & $userElement) 
    ConsoleWrite(@CR & 'Debug: C:\Users\' & $userElement & '\AppData\Roaming\schlumberger\Petrel') 
    ; debug ------------------------------------------------------------------------------ 

    Local $petrelFolders = _FileListToArray("C:\Users\" & $userElement & "\AppData\Roaming\schlumberger\Petrel", "*", 2) 
    ;ConsoleWrite(@CR & '@error = ' & @error) 
    ;ConsoleWrite(@CR & '$petrelFolders = ' & $petrelFolders) 
    If @error = 4 Then 
     ConsoleWrite(@CR & 'No folders have been found.') 
     ConsoleWrite(@CR & '@error = ' & @error) 
    Else 
     For $petrelElement in $petrelFolders 
      ConsoleWrite(@CR & '@error = ' & @error) 
      ConsoleWrite(@CR & '$petrelElement = ' & $petrelElement) 
      If $petrelElement >= "2013" Then 
       ConsoleWrite(@CR & "C:\Users\" & $userElement & "\AppData\Roaming\schlumberger\Petrel\" & $petrelElement & " will be deleted") 
       Local $fileDeleteCheck = DirRemove("C:\Users\" & $userElement & "\AppData\Roaming\schlumberger\Petrel\" & $petrelElement) 
       ConsoleWrite(@CR & '$fileDeleteCheck = ' & $fileDeleteCheck) 
      EndIf 
     Next 
    EndIf 
Next 

CreateDirectories($userList) 

EndFunc 

명확한 내용이 필요하면 알려주십시오.

답변

2

이유가 없으므로 @error은 항상 0을 반환하므로 조금만 다시 작성하면 문제를 해결할 수 있습니다. 나는 약간 다른 방식으로이 파일을 보았습니다. @error0 (우리 폴더가 있음)이고 $petrelFolders의 첫 번째 요소가 0보다 큰지 확인합니다 (이 첫 번째 요소는 발견 된 디렉터리의 수를 포함합니다). 0 인 경우 반복하지 않으려합니다.) 그러면 다음과 같이 표시됩니다.

Func DeleteDirectories($userList) 

If $debug = True Then ConsoleWrite(@CR & 'Function: DeleteDirectories') 

;_ArrayDisplay($userList) 
For $userElement in $userList 
    ; debug ------------------------------------------------------------------------------ 
    ConsoleWrite(@CR & 'Number of user profiles found = ' & $userList[0]) 
    ConsoleWrite(@CR & '$userElement = ' & $userElement) 
    ConsoleWrite(@CR & 'Debug: C:\Users\' & $userElement & '\AppData\Roaming\schlumberger\Petrel') 
    ; debug ------------------------------------------------------------------------------ 

    Local $petrelFolders = _FileListToArray("C:\Users\" & $userElement & "\AppData\Roaming\schlumberger\Petrel", "*", 2) 
    ;ConsoleWrite(@CR & '@error = ' & @error) 
    ;ConsoleWrite(@CR & '$petrelFolders = ' & $petrelFolders) 
    If @error = 0 And $petrelFolders[0] > 0 Then 
     For $i = 0 To Ubound($petrelFolders) - 1 Step 1 
      If $i <> 0 And $petrelFolders[$i] >= Int("2013") Then 
       ConsoleWrite(@CR & "C:\Users\" & $userElement & "\AppData\Roaming\schlumberger\Petrel\" & $petrelFolders[$i] & " will be deleted") 
      EndIf 
     Next 
    EndIf 
Next 

CreateDirectories($userList) 

EndFunc 
관련 문제