Tauschen

  • Hallo zusammen.

    Ich habe auf Laufwerk-D 792 Dateien in den ich pre27 durch neg32 tauschen muss.
    Da ich diese nicht alle manuell öffnen möchte, dann die Stellen suchen möchte und dann tauschen möchte, würde ich das gerne mit Auto IT lösen.
    Die Dateien befinden sich alle in verschiedenen Ordnern und Unterordnern.

    Wie kann ich das machen, denn das wäre sonst eine arbeit, die sicherlich zwei Tage dauert.

    Vielen Dank schon jetzt für die Hilfe.

    LG, Alina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    2 Mal editiert, zuletzt von Alina (13. November 2009 um 09:32)

  • Hi,
    ich habe letztens eine UDF im englischen Forum gefunden, die alle Unterordner durchsucht, und bei der man noch so einiges einstellen kann.

    Bsp:

    [autoit]


    #include <FileListToArray3.au3>
    $list = _FileListToArray3("C:\", "*.txt;*.avi", 1, 1, 1, "", 1)
    _ArrayDisplay($list)

    [/autoit]

    Ich laads sie mal im Anhang hoch.

    danach musst die Anzahl der Einträge im Array finden. Die Anzahl der gefundenen Dateien wird in $list{0] gespeichert. Also

    [autoit]


    $max = $list[0]

    [/autoit]

    Jetzt ein neues Array, um jede Datei zu öffnen.

    [autoit]

    Dim $array_fileopen[$max]

    [/autoit]

    Jetzt eine for-Schleife, die alle Dateien öffnet.

    [autoit]

    for $i = 1 to $max
    $array_fileopen[$i] = fileopen(list[$i], ;option musst du selber angeben, weil ich nicht so genau weis, was du ab jetzt machen willst...
    next

    [/autoit]

    So, jetzt müssten alle Dateien geöffnet sein. Jetzt musst du mit Fileread die ganzen Dateien einlesen und dein Wort ersetzen. Ich weis aber nicht so genau wie du das meinst. Sind das Textdateien, in denen du gerne das eine Wort ersetzt haben möchtest?
    Das ist nur eine Idee, ich hab das in meinem Script auch so ähnlich umgesetzt, ob das jetzt die einfachste Lösung ist, weis ich nicht.

    Einmal editiert, zuletzt von anno2008 (7. Juli 2008 um 13:47)

    • Offizieller Beitrag

    Bei Textdateien ist das relativ einfach. Mit Hilfe von Bugfix's Funktion "_GetFilesFolder_Rekursiv()" und ein paar zusätzlichen Befehlen:

    Spoiler anzeigen
    [autoit]


    Global $aFiles, $Source, $Dest

    [/autoit] [autoit][/autoit] [autoit]

    $aFiles = _GetFilesFolder_Rekursiv('D:\', 'txt', 0) ; Alle Textdateien inkl. Pfad in ein Array einlesen (rekursiv)
    If IsArray($aFiles) Then ; Testen, ob Textdateien gefunden wurden
    For $i = 1 To $aFiles[0] ; Alle im Array enthaltenen Textdateien durchgehen
    $Source = FileRead($aFiles[$i]) ; Datei einlesen
    If Not @error Then ; wenn kein Fehler aufgetreten ist, dann...
    $Source = StringReplace($Source, 'pre27', 'neg32') ; String ersetzen (wenn Case-Sensitive gewünscht, dann ",1" anhängen)
    If @extended > 0 Then ; wenn min. 1 String ersetzt wurde, dann...
    $Dest = FileOpen($aFiles[$i], 2) ; Datei zum überschreiben öffnen
    If $Dest <> -1 Then ; wenn kein Fehler aufgetreten ist, dann...
    FileWrite($Dest, $Source) ; Datei schreiben
    FileClose($Dest) ; und anschließend schließen
    EndIf
    EndIf
    EndIf
    Next
    EndIf
    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück (Einträge @LF-getrennt)
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0)
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles,1), @LF)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles,1)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1)
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & @LF
    Else
    $strFiles &= $file.Path & @LF
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & @LF
    _ShowSubFolders($Subfolder, $Ext, $Dir)
    Next
    EndFunc

    [/autoit]
  • Hallo.

    Das ist ja super! Die Lsg. hätte ich nie gedacht, das es geht.

    DANKE DANKE DANKE !!!

    LG, Crazy-A.

    Edit: Hier noch eine Info:

    Wer zwei Sachen auf einmal auswechseln muss, der schreibt diese Zeilen 2 x hintereinander. Aber bitte auch anpassen in Zeile 8 von Oscar seiner Lösung.

    Spoiler anzeigen
    [autoit]


    $aFiles = _GetFilesFolder_Rekursiv('D:\', 'txt', 0) ; Alle Textdateien inkl. Pfad in ein Array einlesen (rekursiv)
    If IsArray($aFiles) Then ; Testen, ob Textdateien gefunden wurden
    For $i = 1 To $aFiles[0] ; Alle im Array enthaltenen Textdateien durchgehen
    $Source = FileRead($aFiles[$i]) ; Datei einlesen
    If Not @error Then ; wenn kein Fehler aufgetreten ist, dann...
    $Source = StringReplace($Source, 'pre27', 'neg32') ; String ersetzen (wenn Case-Sensitive gewünscht, dann ",1" anhängen)
    If @extended > 0 Then ; wenn min. 1 String ersetzt wurde, dann...
    $Dest = FileOpen($aFiles[$i], 2) ; Datei zum überschreiben öffnen
    If $Dest <> -1 Then ; wenn kein Fehler aufgetreten ist, dann...
    FileWrite($Dest, $Source) ; Datei schreiben
    FileClose($Dest) ; und anschließend schließen
    EndIf
    EndIf
    EndIf
    Next
    EndIf

    [/autoit]

    Ui, da kann man echt "FOUL" werden ;)

    LG, Crazy-A.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    2 Mal editiert, zuletzt von Crazy-A (7. Juli 2008 um 23:35)

    • Offizieller Beitrag

    Hier noch eine Version zum austauschen von mehreren Strings:

    Spoiler anzeigen
    [autoit]


    Global $aFiles, $Source, $Dest, $Replace

    [/autoit] [autoit][/autoit] [autoit]

    ToolTip('Read Data! Please wait!')
    $aFiles = _GetFilesFolder_Rekursiv('D:\', 'txt', 0) ; Alle Textdateien inkl. Pfad in ein Array einlesen (rekursiv)
    ToolTip('')
    If IsArray($aFiles) Then ; Testen, ob Textdateien gefunden wurden
    For $i = 1 To $aFiles[0] ; Alle im Array enthaltenen Textdateien durchgehen
    ToolTip('Read ' & $aFiles[$i])
    $Source = FileRead($aFiles[$i]) ; Datei einlesen
    If Not @error Then ; wenn kein Fehler aufgetreten ist, dann...

    $Source = StringReplace($Source, 'pre27', 'neg32') ; String1 ersetzen (wenn Case-Sensitive gewünscht, dann ",1" anhängen)
    $Replace = @extended ; festhalten, wie viele Strings ersetzt wurden bzw. ob überhaupt

    $Source = StringReplace($Source, 'bla', 'bla67') ; String2 ersetzen (wenn Case-Sensitive gewünscht, dann ",1" anhängen)
    $Replace += @extended ; festhalten, wie viele Strings ersetzt wurden bzw. ob überhaupt

    $Source = StringReplace($Source, 'blabla', 'blabla67') ; String3 ersetzen (wenn Case-Sensitive gewünscht, dann ",1" anhängen)
    $Replace += @extended ; festhalten, wie viele Strings ersetzt wurden bzw. ob überhaupt

    [/autoit] [autoit][/autoit] [autoit]

    If $Replace > 0 Then ; wenn min. 1 String ersetzt wurde, dann...
    $Dest = FileOpen($aFiles[$i], 2) ; Datei zum überschreiben öffnen
    If $Dest <> -1 Then ; wenn kein Fehler aufgetreten ist, dann...
    FileWrite($Dest, $Source) ; Datei schreiben
    FileClose($Dest) ; und anschließend schließen
    EndIf
    EndIf
    EndIf
    Next
    ToolTip('')
    MsgBox(0, 'StringReplace', 'Ready.')
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück (Einträge @LF-getrennt)
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0)
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles,1), @LF)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles,1)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1)
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & @LF
    Else
    $strFiles &= $file.Path & @LF
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & @LF
    _ShowSubFolders($Subfolder, $Ext, $Dir)
    Next
    EndFunc

    [/autoit]