Hi,
Forensuche hab ich schon benutzt, schlau bin ich aber nicht draus geworden.
Wie kann ich ganz normal eine Datei auf C: suchen?
Wenn ich es mit FileFindFirstFile mache, sucht er nur in dem Ordner, wo sich das Script befindet.
MFG
D.
Hi,
Forensuche hab ich schon benutzt, schlau bin ich aber nicht draus geworden.
Wie kann ich ganz normal eine Datei auf C: suchen?
Wenn ich es mit FileFindFirstFile mache, sucht er nur in dem Ordner, wo sich das Script befindet.
MFG
D.
Suche mal nach rekursiv.
Mega
Hm das bringt mir exakt ein Suchergebniss..
Hat nicht jemand ein Expample Script?
Guckst Du hier: RecursiveFileSearch
Ok THX hat alles gefunzt
Habe das Skript auch getestet und es funktioniert einwandfrei.
Ich würde nur gerne mehre Dateien mit dem gleichen Namen suchen was muss ichdann an dem Skript verändern.
Also Bsp.: Ich würde gerne das er komplett C:\ durchsucht und mir alle test.txt anzeigt die es gibt.
Problem ist folgendes, bei uns in der Firma gibt es ein Programm in dem ein INI-Eintrag geändert werden muss. Allerdings legt das Programm bei der Installation verschiedene Ordner an. Manchmal sind diese INI's Gott weis warum irgendwo auf der Platte. Dort müsste aber nun ein Pfad geändert werden deshalb wäre es schön zu wissen was ich dort ändern muss.
LG
Schnuecks
Probir mal so:
#include <Array.au3>
Global $PathFound = ""
Dim $Datei = "1.txt"
Dim $Ordner = 'c:\Downloads\AutoIt-Skripte\'
$re = _RecursiveFileSearch($Datei, $Ordner)
If Not @error Then
$splitted = StringSplit($re, '|')
_ArrayDisplay($splitted)
Else
MsgBox(16, 'ERROR', $re)
EndIf
;--------------------------------------------------------------------------------------------------
; Funktion _RecursiveFileSearch($FILE, $SEARCHFOLDER)
;
; Beschreibung Sucht nach vorgegebener Datei in einem Ordner rekursiv
;
; Parameter $FILE: zu suchende Datei
; $SEARCHFOLDER: Ordner für Suchstart
;
; Rückgabe Erfolg: Pfad der gesuchten Datei
; @error = 0
; Fehler: 1-kein Dateiname / 2-kein Ordnername übergeben (3-beides); 4-Datei nicht vorhanden
; @error = 1
;
; Autor BugFix ([email='bugfix@autoit.de'][/email])
;--------------------------------------------------------------------------------------------------
Func _RecursiveFileSearch($FILE, $SEARCHFOLDER)
Dim $Fehler = 0
If $FILE = "" Then
SetError(1)
$Fehler += 1
EndIf
If $SEARCHFOLDER = "" Then
SetError(1)
$Fehler += 2
EndIf
If @error Then Return $Fehler
$FSO = ObjCreate("Scripting.FileSystemObject")
ShowSubFolders($FSO.GetFolder($SEARCHFOLDER), $FILE)
If $PathFound = "" Then
SetError(1)
$Fehler = 4
Return $Fehler
Else
SetError(0)
EndIf
Return StringTrimRight($PathFound, 1)
EndFunc ;==>_RecursiveFileSearch
Func ShowSubFolders($Folder, $FILE)
For $Subfolder In $Folder.SubFolders
If FileExists($Subfolder.Path & "\" & $FILE) Then
$PathFound &= $Subfolder.Path & "\" & $FILE & '|'
;~ ExitLoop
EndIf
ShowSubFolders($Subfolder, $FILE)
Next
EndFunc ;==>ShowSubFolders
; ==>_RecursiveFileSearch
Mega
Das funktioniert schon mal bestens.
Er findet schonmal alle das klappt. Da es sich um INI Dateien handel wollte ich IniWrite benutzen.
Wie kann ich ihm sagen das er in allen gefundenen Dateien die Änderung durchführt?
Bei einer wärs ja kein Problem mit Arrays hab ichs noch nicht so
LG
Schnuecks
Hi,
einfach eine For Next Schleife.
In der Schleife machst du den Pfad dann variabel über das Array.
Mega
Mit einer For NExt Schleife ist soweit klar. Wie bekomme ich das was ich mit _ArrayDisplay angezeigt bekomme in ein Array welches ich dann auslesen kann?
Sorry für die Blödfragen.
LG
Schnuecks
For $i = 1 To UBound($splitted) -1
ConsoleWrite("IniWrite('" & $splitted[$i] & "', ""section"", ""KEY"")" & @CRLF)
Next
Hab es jetzt so gelöst wie ich es wollte. Er soll alle Dateien mit dem Namen finden soll in der Ini schauen ob der Key vorhanden ist und wenn ja den Key ändern.
#include <Array.au3>
Global $PathFound = ""
Dim $Datei = "test.ini"
Dim $Ordner = 'e:\'
$re = _RecursiveFileSearch($Datei, $Ordner)
If Not @error Then
$splitted = StringSplit($re, '|')
For $i = 1 To UBound($splitted) -1
$ini = IniRead($splitted[$i],"Sektion","Key","")
If not $ini = @error Then
IniWrite($splitted[$i],"Sektion", "Key","Wert")
EndIf
Next
Else
MsgBox(16, 'ERROR', $re)
EndIf
;--------------------------------------------------------------------------------------------------
; Funktion _RecursiveFileSearch($FILE, $SEARCHFOLDER)
;
; Beschreibung Sucht nach vorgegebener Datei in einem Ordner rekursiv
;
; Parameter $FILE: zu suchende Datei
; $SEARCHFOLDER: Ordner für Suchstart
;
; Rückgabe Erfolg: Pfad der gesuchten Datei
; @error = 0
; Fehler: 1-kein Dateiname / 2-kein Ordnername übergeben (3-beides); 4-Datei nicht vorhanden
; @error = 1
;
; Autor BugFix ([email='bugfix@autoit.de'][/email])
;--------------------------------------------------------------------------------------------------
Func _RecursiveFileSearch($FILE, $SEARCHFOLDER)
Dim $Fehler = 0
If $FILE = "" Then
SetError(1)
$Fehler += 1
EndIf
If $SEARCHFOLDER = "" Then
SetError(1)
$Fehler += 2
EndIf
If @error Then Return $Fehler
$FSO = ObjCreate("Scripting.FileSystemObject")
ShowSubFolders($FSO.GetFolder($SEARCHFOLDER), $FILE)
If $PathFound = "" Then
SetError(1)
$Fehler = 4
Return $Fehler
Else
SetError(0)
EndIf
Return StringTrimRight($PathFound, 1)
EndFunc ;==>_RecursiveFileSearch
Func ShowSubFolders($Folder, $FILE)
For $Subfolder In $Folder.SubFolders
If FileExists($Subfolder.Path & "\" & $FILE) Then
$PathFound &= $Subfolder.Path & "\" & $FILE & '|'
;~ ExitLoop
EndIf
ShowSubFolders($Subfolder, $FILE)
Next
EndFunc ;==>ShowSubFolders
Vielen lieben Dank an Mega an dieser Stelle
Kein Problem.