Hey Leute,
ich bin mal wieder an ein Problem gekommen, bzw. weiß ich nicht so ganz wie es anstellen soll..
Und zwar würde ich sehr gerne 2 Ordner bzw deren Dateien(+Unterordner) miteinander vergleichen. Da reicht schon date-modified miteinander abgleichen pro Datei.
Beide Ordner enthalten überwiegend die selben Dateien.
Ich möchte nun einen Array erhalten, wo alle Dateinamen enthalten sind, welche sich im Datum(date motified) voneinander unterscheiden .
Z.b ist in beiden Ordner die Datei "test.txt". In Ordner 1 mit dem Datum 12.10.2021 19:25:02, aber in Ordner 2 ein neueres Datum. Dann sollte die "text.txt" in den Array hinein, weil diese neuer ist als in Ordner 1.
Zusätzlich würde ich sehr gerne "neue" Dateien erkennen. Also jene, die bereits in Ordner 2, aber nicht in Ordner 1 sind.
_FileListArrayToRec scheint mir das zu sein was ich benötige und Unterordner durchsucht es eben so.
Leider weiß ich nicht wie ich das mache..
Könnte mir jemand auf die Sprünge helfen?
Vielen Dank im voraus!
2 Folder und deren Dateien miteinander vergleichen
-
sebiix3 -
12. Oktober 2021 um 19:27 -
Erledigt
-
-
Könnte mir jemand auf die Sprünge helfen?
Ich kann ja verstehen, dass Du möglichst schnell eine Lösung für dein Problem erhalten möchtest. Die identische Frage zeitgleich im englischen (compare-content-of-2-folders) und im deutschen Forum zu stellen führt aber dazu, dass sich Helfende ggf. unnötige Arbeit machen. Nicht alle lesen parallel in beiden Foren. Entscheide Dich für ein Forum, und wenn 2 bis 3 Tage nichts passiert, dann kannst Du immer noch im anderen fragen.
-
In Zukunft bitte keine Crosspostings mehr... sonst werde ich dir nicht mehr helfen.
Hier eine kleine Demo:
AutoIt
Alles anzeigen;-- TIME_STAMP 2021-10-13 03:44:22 Opt('MustDeclareVars', 1) #include <File.au3> Global $g_sAutoItDir = StringRegExp(@AutoItExe, '(.+)\\\.*', 1)[0] Global $g_sPath1 = $g_sAutoItDir & '\Include', $g_sPath2 = $g_sAutoItDir & '\Beta\Include' Global $g_aResult = _CompareDirs($g_sPath1, $g_sPath2) ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $g_aResult --> " & $g_aResult & @LF & "!@ " & @TAB & "#Error: " & @error & @TAB & "#Extended: " & @extended & @LF) _ArrayDisplay($g_aResult, '_CompareDirs("' & $g_sPath1 & '", "' & $g_sPath2 & '")', '', 0, Default, 'Name|Größe|Datum|<=>|Datum|Größe|Name') Func _CompareDirs($_sPath1, $_sPath2) Switch False Case FileExists($_sPath1) Return SetError(1, 1) Case FileExists($_sPath2) Return SetError(1, 2) Case $_sPath1 <> $_sPath2 Return SetError(1, 3) EndSwitch Local $sSlash1 = StringInStr($_sPath1, '\') ? '\' : '/' Local $sSlash2 = StringInStr($_sPath2, '\') ? '\' : '/' ; _FileListToArrayRec ( $sFilePath [, $sMask = "*" [, $iReturn = $FLTAR_FILESFOLDERS [, $iRecur = $FLTAR_NORECUR [, $iSort = $FLTAR_NOSORT [, $iReturnPath = $FLTAR_RELPATH]]]]] ) Local $aFiles1 = _FileListToArrayRec($_sPath1, '*', $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_RELPATH) If @error Then Return SetError(@error, 1) ; 9 - No files/folders found Local $aFiles2 = _FileListToArrayRec($_sPath2, '*', $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_RELPATH) If @error Then Return SetError(@error, 2) ; _ArraySort ( ByRef $aArray [, $iDescending = 0 [, $iStart = 0 [, $iEnd = 0 [, $iSubItem = 0 [, $iPivot = 0]]]]] ) _ArraySort($aFiles1, 0, 1) ; Muss für _ArrayBinarySearch! _ArraySearch geht auch ohne... _ArraySort($aFiles2, 0, 1) ; Muss für _ArrayBinarySearch! _ArraySearch geht auch ohne... ;~ _ArrayDisplay($aFiles1, $_sPath1) ;~ _ArrayDisplay($aFiles2, $_sPath2) ; Spalten für FileTime (Last modified) und FileSize (Bytes) hinzufügen _ArrayColInsert($aFiles1, 1) ; FileTime _ArrayColInsert($aFiles1, 2) ; FileSize _ArrayColInsert($aFiles2, 1) _ArrayColInsert($aFiles2, 2) For $i = 1 To $aFiles1[0][0] Step 1 $aFiles1[$i][1] = FileGetTime($_sPath1 & $sSlash1 & $aFiles1[$i][0], $FT_MODIFIED, $FT_STRING) ; YYYYMMDDHHMMSS $aFiles1[$i][2] = FileGetSize($_sPath1 & $sSlash1 & $aFiles1[$i][0]) Next For $i = 1 To $aFiles2[0][0] Step 1 $aFiles2[$i][1] = FileGetTime($_sPath2 & $sSlash2 & $aFiles2[$i][0], $FT_MODIFIED, $FT_STRING) $aFiles2[$i][2] = FileGetSize($_sPath2 & $sSlash2 & $aFiles2[$i][0]) Next ;~ _ArrayDisplay($aFiles1, $_sPath1) ;~ _ArrayDisplay($aFiles2, $_sPath2) ;~ Exit Local $aResult[0][7], $iIndex, $j = 1, $k = 1 While 1 If $j > $aFiles1[0][0] Then ExitLoop ; _ArraySearch ( Const ByRef $aArray, $vValue [, $iStart = 0 [, $iEnd = 0 [, $iCase = 0 [, $iCompare = 0 [, $iForward = 1 [, $iSubItem = -1 [, $bRow = False]]]]]]] ) ;~ $iIndex = _ArraySearch($aFiles2, $aFiles1[$j][0], 1, 0, 0, 0, 1, 0) ; _ArrayBinarySearch ( Const ByRef $aArray, $vValue [, $iStart = 0 [, $iEnd = 0 [, $iColumn = 0]]] ) $iIndex = _ArrayBinarySearch($aFiles2, $aFiles1[$j][0], 1, 0, 0) ; _ArrayBinarySearch ist schneller als _ArraySearch - das Array muss aber sortiert sein! ; _FileListToArrayRec mit $FLTAR_SORT geht dafür nicht, deshalb das _ArraySort! If $iIndex > -1 Then If $aFiles2[$iIndex][1] = $aFiles1[$j][1] Then _ArrayAdd($aResult, StringFormat('1 %s|%s|%s|==|%s|%s|%s', _ $_sPath1 & $sSlash1 & $aFiles1[$j][0], $aFiles1[$j][2], $aFiles1[$j][1], _ $aFiles2[$iIndex][1], $aFiles2[$iIndex][2], $_sPath2 & $sSlash2 & $aFiles2[$iIndex][0])) ElseIf $aFiles2[$iIndex][1] > $aFiles1[$j][1] Then _ArrayAdd($aResult, StringFormat('2 %s|%s|%s|<-|%s|%s|%s', _ $_sPath1 & $sSlash1 & $aFiles1[$j][0], $aFiles1[$j][2], $aFiles1[$j][1], _ $aFiles2[$iIndex][1], $aFiles2[$iIndex][2], $_sPath2 & $sSlash2 & $aFiles2[$iIndex][0])) Else _ArrayAdd($aResult, StringFormat('3 %s|%s|%s|->|%s|%s|%s', _ $_sPath1 & $sSlash1 & $aFiles1[$j][0], $aFiles1[$j][2], $aFiles1[$j][1], _ $aFiles2[$iIndex][1], $aFiles2[$iIndex][2], $_sPath2 & $sSlash2 & $aFiles2[$iIndex][0])) EndIf Else _ArrayAdd($aResult, StringFormat('4 %s|%s|%s|->', _ $_sPath1 & $sSlash1 & $aFiles1[$j][0], $aFiles1[$j][2], $aFiles1[$j][1])) EndIf $j += 1 WEnd While 1 If $k > $aFiles2[0][0] Then ExitLoop $iIndex = _ArraySearch($aFiles1, $aFiles2[$k][0]) If $iIndex = -1 Then _ArrayAdd($aResult, StringFormat('5 |||<-|%s|%s|%s', _ $aFiles2[$k][1], $aFiles2[$k][2], $_sPath2 & $sSlash2 & $aFiles2[$k][0])) $k += 1 WEnd Return $aResult EndFunc ;==>_CompareDirs
-
Hier noch eine Demo mit Ausgabe des Copy-Befehls:
AutoIt
Alles anzeigen;-- TIME_STAMP 2021-10-13 07:33:49 Opt('MustDeclareVars', 1) #include <File.au3> ; Pfade ohne abschließenden Slash! ;~ Global $g_sPath1 = 'm:\Temp\Dir1', $g_sPath2 = 'm:\Temp\Dir2' Global $g_sPath1 = @ScriptDir & '\Temp\Dir1', $g_sPath2 = @ScriptDir & '\Temp\Dir2' Global $g_sSlash1 = StringInStr($g_sPath1, '\') ? '\' : '/' Global $g_sSlash2 = StringInStr($g_sPath2, '\') ? '\' : '/' Global $g_sSource, $g_sDestination Global $g_aResult = _CompareDirs($g_sPath1, $g_sPath2) ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $g_aResult --> " & $g_aResult & @LF & "!@ " & @TAB & "#Error: " & @error & @TAB & "#Extended: " & @extended & @LF) If UBound($g_aResult) Then ConsoleWrite(_ArrayToString($g_aResult, ' | ') & @CRLF & @CRLF) _Copy2D($g_aResult) _ArrayDisplay($g_aResult, '_CompareDirs("' & $g_sPath1 & '", "' & $g_sPath2 & '")', '', 0, Default, 'Name|Größe|Datum|<=>|Datum|Größe|Name') EndIf Func _Copy2D($g_aResult) If Not UBound($g_aResult) Then Return SetError(1) For $i = 0 To UBound($g_aResult) - 1 Step 1 Switch $g_aResult[$i][3] Case '==' ; Files are identical ContinueLoop Case '->' ; Copy from $g_sPath1 to $g_sPath2 $g_sDestination = $g_aResult[$i][6] ? $g_aResult[$i][6] : StringReplace($g_aResult[$i][0], $g_sPath1, $g_sPath2) ConsoleWrite('- -> FileCopy("' & $g_aResult[$i][0] & '", "' & $g_sDestination & '", $FC_OVERWRITE + $FC_CREATEPATH)' & @CRLF) Case '<-' ; Copy from $g_sPath2 to $g_sPath1 $g_sSource = $g_aResult[$i][0] ? $g_aResult[$i][0] : StringReplace($g_aResult[$i][6], $g_sPath2, $g_sPath1) ConsoleWrite('! <- FileCopy("' & $g_aResult[$i][6] & '", "' & $g_sSource & '", $FC_OVERWRITE + $FC_CREATEPATH)' & @CRLF) EndSwitch Next EndFunc ;==>_Copy2D Func _CompareDirs($_sPath1, $_sPath2) Switch False Case StringInStr(FileGetAttrib($_sPath1), 'D') ; ist kein Verzeichnis! Return SetError(1, 1) Case StringInStr(FileGetAttrib($_sPath2), 'D') ; ist kein Verzeichnis! Return SetError(1, 2) Case $_sPath1 <> $_sPath2 ; Verzeichnis sind indentisch! Return SetError(1, 3) EndSwitch Local $sSlash1 = StringInStr($_sPath1, '\') ? '\' : '/' Local $sSlash2 = StringInStr($_sPath2, '\') ? '\' : '/' ; _FileListToArrayRec ( $sFilePath [, $sMask = "*" [, $iReturn = $FLTAR_FILESFOLDERS [, $iRecur = $FLTAR_NORECUR [, $iSort = $FLTAR_NOSORT [, $iReturnPath = $FLTAR_RELPATH]]]]] ) Local $aFiles1 = _FileListToArrayRec($_sPath1, '*', $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_RELPATH) If @error Then Return SetError(@error, 1) ; 9 - No files/folders found Local $aFiles2 = _FileListToArrayRec($_sPath2, '*', $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_RELPATH) If @error Then Return SetError(@error, 2) ; _ArraySort ( ByRef $aArray [, $iDescending = 0 [, $iStart = 0 [, $iEnd = 0 [, $iSubItem = 0 [, $iPivot = 0]]]]] ) _ArraySort($aFiles1, 0, 1) ; Muss für _ArrayBinarySearch! _ArraySearch geht auch ohne... _ArraySort($aFiles2, 0, 1) ; Muss für _ArrayBinarySearch! _ArraySearch geht auch ohne... ;~ _ArrayDisplay($aFiles1, $_sPath1) ;~ _ArrayDisplay($aFiles2, $_sPath2) ; Spalten für FileTime (Last modified) und FileSize (Bytes) hinzufügen _ArrayColInsert($aFiles1, 1) ; FileTime _ArrayColInsert($aFiles1, 2) ; FileSize _ArrayColInsert($aFiles2, 1) _ArrayColInsert($aFiles2, 2) For $i = 1 To $aFiles1[0][0] Step 1 $aFiles1[$i][1] = FileGetTime($_sPath1 & $sSlash1 & $aFiles1[$i][0], $FT_MODIFIED, $FT_STRING) ; YYYYMMDDHHMMSS $aFiles1[$i][2] = FileGetSize($_sPath1 & $sSlash1 & $aFiles1[$i][0]) Next For $i = 1 To $aFiles2[0][0] Step 1 $aFiles2[$i][1] = FileGetTime($_sPath2 & $sSlash2 & $aFiles2[$i][0], $FT_MODIFIED, $FT_STRING) $aFiles2[$i][2] = FileGetSize($_sPath2 & $sSlash2 & $aFiles2[$i][0]) Next ;~ _ArrayDisplay($aFiles1, $_sPath1) ;~ _ArrayDisplay($aFiles2, $_sPath2) ;~ Exit Local $aResult[0][7], $iIndex, $j = 1, $k = 1 While 1 If $j > $aFiles1[0][0] Then ExitLoop ; _ArraySearch ( Const ByRef $aArray, $vValue [, $iStart = 0 [, $iEnd = 0 [, $iCase = 0 [, $iCompare = 0 [, $iForward = 1 [, $iSubItem = -1 [, $bRow = False]]]]]]] ) ;~ $iIndex = _ArraySearch($aFiles2, $aFiles1[$j][0], 1, 0, 0, 0, 1, 0) ; _ArrayBinarySearch ( Const ByRef $aArray, $vValue [, $iStart = 0 [, $iEnd = 0 [, $iColumn = 0]]] ) $iIndex = _ArrayBinarySearch($aFiles2, $aFiles1[$j][0], 1, 0, 0) ; _ArrayBinarySearch ist schneller als _ArraySearch - das Array muss aber sortiert sein! ; _FileListToArrayRec mit $FLTAR_SORT geht dafür nicht, deshalb das _ArraySort! If $iIndex > -1 Then If $aFiles2[$iIndex][1] = $aFiles1[$j][1] Then _ArrayAdd($aResult, StringFormat('%s|%s|%s|==|%s|%s|%s', _ $_sPath1 & $sSlash1 & $aFiles1[$j][0], $aFiles1[$j][2], $aFiles1[$j][1], _ $aFiles2[$iIndex][1], $aFiles2[$iIndex][2], $_sPath2 & $sSlash2 & $aFiles2[$iIndex][0])) ElseIf $aFiles2[$iIndex][1] > $aFiles1[$j][1] Then _ArrayAdd($aResult, StringFormat('%s|%s|%s|<-|%s|%s|%s', _ $_sPath1 & $sSlash1 & $aFiles1[$j][0], $aFiles1[$j][2], $aFiles1[$j][1], _ $aFiles2[$iIndex][1], $aFiles2[$iIndex][2], $_sPath2 & $sSlash2 & $aFiles2[$iIndex][0])) Else _ArrayAdd($aResult, StringFormat('%s|%s|%s|->|%s|%s|%s', _ $_sPath1 & $sSlash1 & $aFiles1[$j][0], $aFiles1[$j][2], $aFiles1[$j][1], _ $aFiles2[$iIndex][1], $aFiles2[$iIndex][2], $_sPath2 & $sSlash2 & $aFiles2[$iIndex][0])) EndIf Else _ArrayAdd($aResult, StringFormat('%s|%s|%s|->', _ $_sPath1 & $sSlash1 & $aFiles1[$j][0], $aFiles1[$j][2], $aFiles1[$j][1])) EndIf $j += 1 WEnd While 1 If $k > $aFiles2[0][0] Then ExitLoop $iIndex = _ArraySearch($aFiles1, $aFiles2[$k][0]) If $iIndex = -1 Then _ArrayAdd($aResult, StringFormat('|||<-|%s|%s|%s', _ $aFiles2[$k][1], $aFiles2[$k][2], $_sPath2 & $sSlash2 & $aFiles2[$k][0])) $k += 1 WEnd Return $aResult EndFunc ;==>_CompareDirs
-
-
Ohne es definitiv zu wissen denke ich das er wenn "\" im String ist, es durch "/" ersetzt wird.War falsch!
-
Bitte, kannst Du mir das erklären?
? ist der Ternary Operator - eine Kurzform für If...Else...EndIf.
-
Bitte, kannst Du mir das erklären?
Global $g_sSlash1 = StringInStr($g_sPath1, '\') ? '\' : '/'Ohne es definitiv zu wissen denke ich das er wenn "\" im String ist, es durch "/" ersetzt wird.
Nein, ersetzt wird an dieser Stelle nichts. Es wird geprüft, ob im Pfad (mindestens) ein \ vorkommt. Falls Ja, dann wird $g_sSlash1 ein \ zugewiesen. Falls Nein, dann ein /.
EDIT : Beispiel :
AutoIt
Alles anzeigenGlobal $g_sPath1, $g_sSlash1 $g_sPath1 = "C:\TestDir\Test01\TestSubDir" ; nur \ vorhanden $g_sSlash1 = StringInStr($g_sPath1, '\') ? '\' : '/' ConsoleWrite($g_sSlash1 & @CRLF) $g_sPath1 = "C:/TestDir/Test01/TestSubDir" ; nur / vorhanden $g_sSlash1 = StringInStr($g_sPath1, '\') ? '\' : '/' ConsoleWrite($g_sSlash1 & @CRLF) $g_sPath1 = "C:/TestDir\Test01/TestSubDir" ; / und \ gemischt $g_sSlash1 = StringInStr($g_sPath1, '\') ? '\' : '/' ConsoleWrite($g_sSlash1 & @CRLF)
-
Könntest Du Deine Lösung ggf. auch im englischen Thread posten ?
Wenn ich das mache, dann bekomme ich am Ende noch (völlig unverdient) die Credits .
-
Knapp daneben ist auch vorbei^^
-
Könntest Du Deine Lösung ggf. auch im englischen Thread posten ?
Das ist ja keine Lösung, sondern lediglich eine kleine Demo.
Wenn ich das mache, dann bekomme ich am Ende noch (völlig unverdient) die Credits .
Sei dir gegönnt... also mach dich ran...
-
Sei dir gegönnt... also mach dich ran...
Ich habe im EN-Forum einfach einen Link auf diesen Thread (präziser : auf Deinen Beitrag) gesetzt .
sebiix3 :
Cross-Postings sind nicht per se eine schlechte Sache. Möchte man z.B. Skripte veröffentlichen oder auf Fehler etc. hinweisen (also Dinge von allgemeinem Interesse), dann sind sie sogar hilfreich.
Bei individuellen Fragen sollte man sich aber erst mal auf ein Forum beschränken.
-
Generell gibt es genau für diese Fragestellung bereits fertige Programme!
Cross-Postings sind nicht per se eine schlechte Sache
...wobei noch der dezente Hinweis des TE "...und legt mir mal einer bitte den Arm aus der Sonne..SCHNELLSTMÖGLICH!" angefügt werden sollte!
Sonst kommt wohlmöglich eines der Forenmitglieder auf die Idee, bei fehlendem "Versuchs"-Script davon auszugehen, dass jemand anderes (sic) sich die Mühe macht!
Man (TE) will ja schliesslich erreichen, dass sich 6-8 Forianer in jeweils ihrem Forum mit der allerbesten Lösung überbieten, die man dann letztendlich nur noch aus dem letzten Beitrag rauskopieren und ausführen muss!
Das Beste daran: Man muss nicht mal das Forum durchsuchen!
sonst werde ich dir nicht mehr helfen.
S.o.!
Der Unterschied zwischen "helfen" und komplett alles nach Vorgabe des TE machen ist ein gewaltiger!
Wer nicht mal in der Lage ist, dieses schon x-mal in beiden Foren abgehandelte Thema zu SUCHEN und ggf. auf Probleme mit diesen Scripten hinzuweisen, dem gehört nicht geholfen!
So sehe ich das!
OT an Bitnugger
Dass dieses Script für dich nur eine Fingerübung ist, macht es nicht besser
Aber wie immer dafür von mir ein
Ich möchte nun einen Array erhalten, wo alle Dateinamen enthalten sind, welche sich im Datum(date motified) voneinander unterscheiden .
Wieso ein AutoIt-Array?!
Wenn du bereits so fit mit AutoIt bist, dass du in deinem Script mit den Arrayinhalten weiterarbeiten/programmieren kannst, dann hättest du auch dieses/dein Script posten können.
Das hätte man/ich dann auch gerne erweitert/verbessert/vervollständigt.
Aber ich gehe davon aus, dass dir ein herzhaftes _ArrayDisplay() völlig ausreicht, um händisch mit diesen Dateien weiterzuarbeiten. Denn irgendetwas musst du ja mit diesen Dateien machen wollen?!
-
Vielen Dank für die Erklärung!
Ich bin leider auch einer der sehr gerne IF/THEN/ELSE verwendet obwohl es doch viel einfach oder kürzer geht!
Bitnugger: Super Beispiel für den Vergleich zu IF-Then (extra danke dafür)
lg
Racer
-
[Off-Topic]
...wobei noch der dezente Hinweis des TE "...und legt mir mal einer bitte den Arm aus der Sonne..SCHNELLSTMÖGLICH!" angefügt werden sollte!
Diesen Ausspruch habe ich wirklich vermisst - muss schon einige Zeit her sein, dass Du ihn verwendet hast .
Was das "Demo-Skript" von Bitnugger angeht, auch von mir ein . Ich denke, dass Bitnugger gar nicht in der Lage ist ein 'nur halbfertiges' Skript abzuliefern
-
Ich bin leider auch einer der sehr gerne IF/THEN/ELSE verwendet obwohl es doch viel einfach oder kürzer geht!
Ja... mal schauen, in 1-3 Jahren siehst du das sicher anders!
Hier noch ein Bsp., um es dir schmackhaft zu machen :
AutoIt
Alles anzeigenLocal $aFileArray1[10], $aFileArray2[9], $iLength ; Select largest array - If...ElseIf...Else...EndIf ; ------------------------------------------------- ; So etwa habe ich es heute im blauen Forum gesehen. If UBound($aFileArray1) > UBound($aFileArray2) Then $iLength = UBound($aFileArray1) ElseIf UBound($aFileArray1) < UBound($aFileArray2) Then $iLength = UBound($aFileArray2) Else ; Arrays must be same size $iLength = UBound($aFileArray1) EndIf ConsoleWrite('$iLength = ' & $iLength & @CRLF) ; --------------------- insgesamt 307 Zeichen ; Aua... so macht man das: Local $ub1 = UBound($aFileArray1), $ub2 = UBound($aFileArray2) If $ub1 > $ub2 Then $iLength = $ub1 ElseIf $ub1 < $ub2 Then $iLength = $ub2 Else ; Arrays must be same size $iLength = $ub1 EndIf ConsoleWrite('$iLength = ' & $iLength & @CRLF) ; --------------------- insgesamt 250 Zeichen ; Select largest array - Ternary Operator ; ------------------------------------------------- Local $ub1 = UBound($aFileArray1), $ub2 = UBound($aFileArray2) $iLength = ($ub1 > $ub2) ? ($ub1) : ($ub1 < $ub2) ? ($ub2) : ($ub1) ConsoleWrite('$iLength = ' & $iLength & @CRLF) ; --------------------- insgesamt 179 Zeichen ; Ohne () geht auch, kann aber in die Hose gehen... doch hier würde ich es ohne machen. Local $ub1 = UBound($aFileArray1), $ub2 = UBound($aFileArray2) $iLength = $ub1 > $ub2 ? $ub1 : $ub1 < $ub2 ? $ub2 : $ub1 ConsoleWrite('$iLength = ' & $iLength & @CRLF) ; -------------------- insgesamt 169 Zeichen
-
Mal ein anderer Ansatz:
Solltest Du ein bestimmtes Problem lösen wollen und das nicht zwingend mit AutoIT, könntest Du das vielleicht auch mit verfügbarer Software machen.
Mach von beiden Verzeichnissen mit der Shell jeweils eine Textdatei und vergleiche die mit Notepad++ mit dem Plugin "Compare".
Vermutlich gibt es auch noch diverse andere Hilfsmittel in der weiten Welt des Netzes.
-
Solltest Du ein bestimmtes Problem lösen wollen und das nicht zwingend mit AutoIT, könntest Du das vielleicht auch mit verfügbarer Software machen.
Richtig, das ist so gut wie immer machbar, doch wenn ein User nicht selbst darauf kommt, hat er ein dringenderes Problem, das sich mit Software nicht lösen lässt... von daher ist dieser Hinweis für meine Begriffe eher überflüssig.
Mach von beiden Verzeichnissen mit der Shell jeweils eine Textdatei und vergleiche die mit Notepad++ mit dem Plugin "Compare".
Das ist so ziemlich sicher einer der umständlichsten Wege, um sein Problem zu lösen... denn der größte Teil an Arbeit bleibt so ja trotzdem bei ihm hängen. Da du hier die Shell erwähnst... ja, damit ginge das auch relativ einfach... also via Batch mit CMD oder Powershell - die ihm dann die ganze Arbeit abnehmen. Doch irgendwer muss das Batch ja dann auch schreiben... und da muss man schon richtig fit für sein, um dies hinzubekommen.
Mit AutoIt bekomme ich das in ~ 15-30 Minuten hin... für ein Batch mit CMD oder Powershell wäre mein Tag vermutlich versaut.
Vermutlich gibt es auch noch diverse andere Hilfsmittel in der weiten Welt des Netzes.
In der Tat... die gibt es... z.B. Total Commander... der hat eine super Funktion dafür eingebaut, mit der Verzeichnisinhalte synchronisiert werden können - ein sehr mächtiges Werkzeug, dass keine Wünsche offen lässt.