Universeller Datei / Ordner Sucher [ _Get_DateiSucher_Netzwerk_Dos ]
Hallo Leute!
Ich habe eine Universelle Funktion geschrieben die nach jeder Beliebigen Datei / Ordner Sucht
Auf Lokal, Netzwerk u. CD/DVD Laufwerken natürlich auch USB.
Die Funktion setzt sich aus_FileFindNet($SFile, $NPath , $LPath , $Path , $ESch) zusammen, läuft über CMD.
Wildcards[ Gesuch* ( nicht CD/DVD Netzwerk ) | Gesuch.* ( nicht CD/DVD Netzwerk ) | *.Gesuch ( nicht Netzwrk ) | *.* ]
Update: Wenn Fehler wir Error auf -1 gesetzt, Einstellung der Wildcards und ob Datei oder Pfad ausgegeben werden soll!
Spoiler anzeigen
#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
Spoiler anzeigen
#include <_FileFindNet.au3>
#include <Array.au3>
$aTest = _FileFindNet('note*','','C:\',0,0)
_ArrayDisplay($aTest)
$aTest = _FileFindNet('notepad.*','','C:\',0,1)
_ArrayDisplay($aTest)
$aTest = _FileFindNet('*.log','','C:\',1,0)
_ArrayDisplay($aTest)
$aTest = _FileFindNet('notepad.exe','','C:\',0,0)
_ArrayDisplay($aTest)
$aTest = _FileFindNet('Temporary Internet Files','','C:\',0,0)
_ArrayDisplay($aTest)
$aTest = _FileFindNet('*.*','','C:\',0,0)
_ArrayDisplay($aTest)
$aTest = _FileFindNet('*.bat','','C:\',0,0)
_ArrayDisplay($aTest)
$aTest = _FileFindNet('*.wma','','C:\',0,0)
_ArrayDisplay($aTest)
$aTest = _FileFindNet('*mp3','','C:\',0,2)
_ArrayDisplay($aTest)
$aTest = _FileFindNet('win*','','C:\',1,0)
_ArrayDisplay($aTest)
;$aTest = _FileFindNet('*.*','\\TestPC\C','')
;_ArrayDisplay($aTest
Und noch mal zu Downloaden!
Viel spass!
LG Kleiner