Hallo zusammen
Ich suche ein Script, kann aber auch Batch, VB. ein Tool etc sein, damit ich nicht von Pfoten 1000 Dateien durchforsten muss.
Hat das schonmal jemand gemacht?
*fragendschau*
Surfy
Hallo zusammen
Ich suche ein Script, kann aber auch Batch, VB. ein Tool etc sein, damit ich nicht von Pfoten 1000 Dateien durchforsten muss.
Hat das schonmal jemand gemacht?
*fragendschau*
Surfy
Hat das schonmal jemand gemacht?
Bisher nicht, aber hier ist die Basis für dein Skript:
#include <Array.au3>
#include <File.au3>
#include <Crypt.au3>
$sPath = @ScriptDir
[/autoit] [autoit][/autoit] [autoit]Global $hFile = FileOpen(@ScriptDir & "\FileVersions.txt", 2) ; 1 = anhängen 2 = überschreiben
[/autoit] [autoit][/autoit] [autoit]Do
$sPath = FileSelectFolder("Bitte Ordner für den die FileVersionen ermittelt werden sollen auswählen", "::{20D04FE0 - 3AEA - 1069 - A2D8 - 08002B30309D}", 2, $sPath)
Until Not @error
$aTmp = _RecursiveFileListToArray($sPath, '', 1, 1)
Dim $aFiles[UBound($aTmp)][2]
for $i = 0 to UBound($aTmp) -1
$aFiles[$i][0] = $aTmp[$i]
$aFiles[$i][1] = FileGetVersion ($aTmp[$i],"FileVersion")
Next
_ArrayDisplay($aFiles)
;for $i = 0 to UBound($aFiles)
;===============================================================================
; Description:: gibt Verzeichnisse und/oder Dateien (rekursiv) zurück, die
; einem RegExp-Pattern entsprechen
; Parameter(s): $sPath = Startverzeichnis
; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
; $iFlag = Auswahl
; 0 = Dateien & Verzeichnisse
; 1 = nur Dateien
; 2 = nur Verzeichnisse
; $iFormat = Rückgabeformat
; 0 = String
; 1 = Array mit [0] = Anzahl
; 2 = Nullbasiertes Array
; $sDelim = Trennzeichen für die String-Rückgabe
; Requirement(s): AutoIt 3.3.0.0
; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
; Author(s): Oscar (http://www.autoit.de)
; Anregungen von: bernd670 (http://www.autoit.de)
;===============================================================================
Func _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
Local $hSearch, $sFile, $sReturn = ''
If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
$hSearch = FileFindFirstFile($sPath & '*.*')
If @error Or $hSearch = -1 Then Return SetError(0, 0, $sReturn)
While True
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
$sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0)
ContinueLoop
EndIf
If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
WEnd
FileClose($hSearch)
If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
Return $sReturn
EndFunc ;==>_RecursiveFileListToArray
mfg autoBert
Wow, danke Dir!
Läuft sowas von sauber
Einziges goodie wäre noch, wenn man mit sortierbare Columnen, nach Datei Versionen sortieren könnte, aber das wäre dann auch wirklich nur noch ein goodie Was aber anscheinend gar nicht so einfach ist? Die Suche war zu "Arraydisplay sortierbar" - nicht gerade hilfreich...
Nochmals Danke, Surfy
Moin, ne geht einfach schau mal in der Hilfe nach
[autoit]_ArraySort()
[/autoit]
dass sortiert dir ein Array wie du es haben möchtest, als Paramter 2 übergibst du die Richtung (A-Z oder Z-A, bzw Zahlen gehen glaube ich auch)
Gruß Marvin
Hallo Surfy,
Einziges goodie wäre noch, wenn man mit sortierbare Columnen, nach Datei Versionen sortieren könnte, aber das wäre dann auch wirklich nur noch ein goodie Was aber anscheinend gar nicht so einfach ist? Die Suche war zu "Arraydisplay sortierbar" - nicht gerade hilfreich...
Da müsstest du dir ein eigenes ArrayDisplay schreiben. Ich denke du suchst so etwas:
; *** Start added by AutoIt3Wrapper ***
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
; *** End added by AutoIt3Wrapper ***
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; *** Start added by AutoIt3Wrapper ***
#include <GUIConstantsEx.au3>
; *** End added by AutoIt3Wrapper ***
#include <Array.au3>
#include <File.au3>
#include <GuiListView.au3>
$sPath = @ScriptDir
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Do
$sPath = FileSelectFolder("Bitte Ordner für den die FileVersionen ermittelt werden sollen auswählen", "::{20D04FE0 - 3AEA - 1069 - A2D8 - 08002B30309D}", 2, $sPath)
Until Not @error
$aTmp = _RecursiveFileListToArray($sPath, '(?i).*exe', 1, 1)
;_ArrayDisplay($aTmp)
$Gui = GUICreate("", 1024, 600)
$hListview = GUICtrlCreateListView("Datei-Name|Version|erstellt am|letzte Änderung", 5, 5, 1014, 590, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER))
For $i = 0 To UBound($aTmp) - 1
$sFileVer = FileGetVersion($aTmp[$i], "FileVersion")
;If $sFileVer <> "" Then
$aDate = FileGetTime($aTmp[$i], 1, 0)
If IsArray($aDate) Then
$tCreated = $aDate[0] & "/" & $aDate[1] & "/" & $aDate[2]
Else
$tCreated = ""
EndIf
$aDate = FileGetTime($aTmp[$i], 0, 0)
If IsArray($aDate) Then
$tLastChanged = $aDate[0] & "/" & $aDate[1] & "/" & $aDate[2]
Else
$tLastChanged = ""
EndIf
GUICtrlCreateListViewItem($aTmp[$i] & "|" & $sFileVer & "|" & $tCreated & "|" & $tLastChanged, $hListview)
;EndIf
Next
_GUICtrlListView_SetColumnWidth($hListview, 0, $LVSCW_AUTOSIZE)
_GUICtrlListView_SetColumnWidth($hListview, 1, 80)
_GUICtrlListView_SetColumnWidth($hListview, 2, 100)
_GUICtrlListView_SetColumnWidth($hListview, 3, 100)
_GUICtrlListView_RegisterSortCallBack($hListview)
GUISetState(@SW_SHOW)
;GUICtrlSetColor(-1, 0x22C21F)
;GUICtrlSetColor(-1, 0xAA0000)
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
_GUICtrlListView_UnRegisterSortCallBack($hListview)
Exit
Case $hListview
; Anstoßen der Callback-Sortierfunktion
_GUICtrlListView_SortItems($hListview, GUICtrlGetState($hListview))
EndSwitch
WEnd
;===============================================================================
; Description:: gibt Verzeichnisse und/oder Dateien (rekursiv) zurück, die
; einem RegExp-Pattern entsprechen
; Parameter(s): $sPath = Startverzeichnis
; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
; $iFlag = Auswahl
; 0 = Dateien & Verzeichnisse
; 1 = nur Dateien
; 2 = nur Verzeichnisse
; $iFormat = Rückgabeformat
; 0 = String
; 1 = Array mit [0] = Anzahl
; 2 = Nullbasiertes Array
; $sDelim = Trennzeichen für die String-Rückgabe
; Requirement(s): AutoIt 3.3.0.0
; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
; Author(s): Oscar (http://www.autoit.de)
; Anregungen von: bernd670 (http://www.autoit.de)
;===============================================================================
Func _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
Local $hSearch, $sFile, $sReturn = ''
If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
$hSearch = FileFindFirstFile($sPath & '*.*')
If @error Or $hSearch = -1 Then Return SetError(0, 0, $sReturn)
While True
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
$sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0)
ContinueLoop
EndIf
If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
WEnd
FileClose($hSearch)
If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
Return $sReturn
EndFunc ;==>_RecursiveFileListToArray
falls nur Dateien mit einer Fileversion angezeigt werden sollen einfach die beiden auskommentierten Zeilen wieder zulassen,
mfg autoBert
Danke Dir autoBert, das ist perfekt so!
Nun sind noch mehr Kommandos drin, die ich noch nie gelesen habe
Danke Dir autoBert, das ist perfekt so!
Schön, dann hast du ja jetzt eine Lösung, schön wäre es auch wenn du das Thema auf gelöst setzen würdest. Einfach 1. Beitrag bearbeiten, Präfix (nähe Überschrift) auf gelöst setzten und absenden.
Nun sind noch mehr Kommandos drin, die ich noch nie gelesen habe
Da kann die Hilfe helfen, dass du diese jetzt nicht nur kennst sndern auch verstehst was sie tun,
mfg autoBert