#include-once
#include <File.au3>
;==========================================================================================================
; Function Name:   _FileFindNet($SFile, $NPath = True, $LPath = True, $Path = True, $ESch = True)
; Description:     Auflistung von Dateien und Ordnern auf Lokalen, Netzwerk, CD/DVD - Laufwerk
; Parameter(s):    $SFile      der oder die zur Suchende Datei / Ordner
;                  $Path       Lokaler Pfad
;                  $NetPath    Netzwerk Pfad
;                  $Path       0 Mit Datei ausgabe, 1 nur Pfad ausgabe mit abschliesenden '\' auser bei
;                              benutzug von Wildcards (*.*)
;                  $ESch       Einstellung der Wildcards [ 0 alle benutzbar , 1 (.*)  nicht benutzbar ,
;                              2 (*.) nicht benutzbar , 3 (*.*) keine Wildcards benutzbar
; Return Value(s): Array (Standard)  mit den gefundenen Pfaden der Dateien und/oder Ordner
;                  Array[0] enthält die Anzahl der gefundenen Dateien/Ordner auser bei suche
;                  mit *.*
;                  wird $NetPath oder $Path nicht benutzt dann ein [ '' ] angeben
;                  Es geht nur einzelt entweder $Path oder $NetPath beides zusammen nicht!
;                  Wildcards[ Gesuch* ( nicht CD/DVD Netzwerk ) | *Gesuch ( nicht Netzwerk )
;                  |Gesuch.* ( nicht CD/DVD Netzwerk ) |*.Gesuch ( nicht Netzwrk ) | *.* ]
;
;                  bei Fehler wird Error auf -1 gesetzt
;
; Author(s):       Kleiner27
;========================================================================================================


Func _FileFindNet($SFile, $NPath = True, $LPath = True, $Path = True, $ESch = True)
	Dim $aEw[18] = ['*.*', '\\', '*', '.', '', '\', 'CDFS', 'UDF', 'dir /a /b /s ', ' ', ' /c ', 'Ü', 'ü', 'Ö', 'ö', 'Ä', 'ä', 'ß']
	Dim $Such = $SFile, $Proc, $line, $Ers, $aAr, $aN[1], $szDrive, $szDir, $szFName, $szExt, $EV, $evt, $PSp, $w, $z = 1
	Dim $STA1 = StringRight($Such, 1)
	Dim $STA2 = StringLeft($Such, 1)
	Dim $STA3 = StringLeft($NPath, 2)
	Dim $STA4 = DriveGetFileSystem($LPath)
	If $STA4 = $aEw[6] Or $STA4 = $aEw[7] And $STA1 = $aEw[2] And $Such <> $aEw[0] Then Return SetError(-1)
	Switch $ESch
		Case 0
			If $STA1 = $aEw[2] Or $STA2 = $aEw[2] And $Such <> $aEw[0] And $STA3 = $aEw[1] Then Return SetError(-1)
		Case 1
			If $STA1 = $aEw[2] Then Return SetError(-1)
		Case 2
			If $STA2 = $aEw[2] Then Return SetError(-1)
		Case 3
			If $STA2 = $aEw[2] Or $STA1 = $aEw[2] Then Return SetError(-1)
	EndSwitch
	If $Such = $aEw[0] Or $STA1 = $aEw[2] Or $STA2 = $aEw[2] Then
		$w = 0
	Else
		For $i = 11 To 1 Step -1
			If StringRight($Such, $i) = $aEw[3] & StringRight($Such, $i - 1) Then $Such = $aEw[2] & StringRight($Such, $i)
		Next
		If $Such = $SFile Then $Such = $aEw[0]
		$w = 1
	EndIf
	$Proc = Run(@ComSpec & $aEw[10] & $aEw[8] & $Such & $aEw[9] & $NPath, $LPath, @SW_HIDE, 2)
	While 1
		$line &= StdoutRead($Proc, 0, 0)
		If @error Then ExitLoop
		$Ers = StringReplace(StringReplace(StringReplace(StringReplace(StringReplace(StringReplace(StringReplace($line, Chr(154), $aEw[11]), Chr(129), $aEw[12]), Chr(153), $aEw[13]), Chr(148), $aEw[14]), Chr(142), $aEw[15]), Chr(132), $aEw[16]), Chr(225), $aEw[17])
	WEnd
	$aAr = StringSplit(StringTrimRight($Ers, 2), @CRLF, 3)
	If $Such = $aEw[0] And $STA3 = $aEw[1] Or $Such = $aEw[0] And $w = 0 Or $aAr[0] = $aEw[4] Then Return $aAr
	Switch $Path
		Case 1
			Switch $w
				Case 0
					For $i = 0 To UBound($aAr) - 1
						ReDim $aN[$z + 1]
						$PSp = _PathSplit($aAr[$i], $szDrive, $szDir, $szFName, $szExt)
						$aN[$z] = $PSp[1] & $PSp[2]
						$z += 1
					Next
					$aN[0] = $z - 1
					Return $aN
				Case 1
					For $i = 0 To UBound($aAr) - 1
						$Str = StringSplit($aAr[$i], $aEw[5])
						If $Str[$Str[0]] = $SFile Then
							ReDim $aN[$z + 1]
							$PSp = _PathSplit($aAr[$i], $szDrive, $szDir, $szFName, $szExt)
							$aN[$z] = $PSp[1] & $PSp[2]
							$z += 1
						EndIf
					Next
					$aN[0] = $z - 1
					Return $aN
			EndSwitch
		Case Else
			Switch $w
				Case 0
					For $i = 0 To UBound($aAr) - 1
						ReDim $aN[$z + 1]
						$aN[$z] = $aAr[$i]
						$z += 1
					Next
					$aN[0] = $z - 1
					Return $aN
				Case 1
					For $i = 0 To UBound($aAr) - 1
						$Str = StringSplit($aAr[$i], $aEw[5])
						If $Str[$Str[0]] = $SFile Then
							ReDim $aN[$z + 1]
							$aN[$z] = $aAr[$i]
							$z += 1
						EndIf
					Next
					$aN[0] = $z - 1
					Return $aN
			EndSwitch
	EndSwitch
EndFunc   ;==>_FileFindNet
