Problem mit Script

  • Hallo,
    ich habe mit meinem Script ein Problem:
    Es soll von dem Inhalt eines Ordners Hardlinks erstellen.
    Ich habe mir das so vorgestellt:

    Ordnerstruktur:

    Ordner1
    ..Unterordner1
    ....Unterunterordner1
    ....Unterunterordner2
    ..Unterordner2
    ....Unterunterordner3
    ..Unterordner3

    Das soll das Prog erstellen:
    Ordner2
    ..Unterordner1
    ....Hardlink zu Unterunterordner1
    ....Hardlink zu Unterunterordner3
    ..Unterordner2
    ....Hardlink zu Unterunterordner3
    ..Hardlink zu Unterordner3

    Ich habe auch schon was gemacht, es funktioniert nur nicht richtig.

    Spoiler anzeigen
    [autoit]


    Dim $dir = Ordner1 in dem die Unterordner liegen
    Dim $dir2 = Ordner2 in dem Die Hardlinks erstellt werden

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

    $search = FileFindFirstFile( $dir & "*.*" )
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    If FileExists( $dir & $file & "\NUL" ) Then
    MsgBox( 1, "bla" , "1" )
    DirCreate( $dir2 & $file )
    $search2 = FileFindFirstFile( $dir & $file & "\*.*" )
    While 1
    $file2 = FileFindNextFile($search2)
    If @error Then ExitLoop
    If FileExists( $dir & $file & "\" & $file2 & "\NUL" ) Then
    MsgBox(1, "bla", "Link: " & FileCreateNTFSLink($dir & $file & "\" & $file2, $dir2 & $file & "\" & $file2 ))
    Else
    FileCreateNTFSLink($dir & $file, $dir2 & $file )
    EndIf
    FileClose($search2)
    WEnd
    EndIf
    WEnd
    FileClose($search)

    [/autoit]

    Wäre über eure Hilfe sehr Dankbar

    2 Mal editiert, zuletzt von jendrik (15. Juli 2008 um 22:26)

  • Hallo @jendrik

    Bitte gleich lernen: eindeutige Themen / Überschriften, denn Hilfe braucht doch jeder hier, oder?
    Ist nicht böse gemeint, sondern eine BITTE.

    Crazy-A.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Fals es noch jemanden interessiert: hier mein ergebnis

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    Dim $dir = $Quellordner
    Dim $dir2 = $Zielordner
    Dim $a = 1
    Dim $cut_len

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

    $files = _GetFilesFolder_Rekursiv( $dir, '*', 1,0 )
    While $a < $files[0]
    $len_dir = StringLen( $dir )
    $len_file = StringLen( $files[$a] )
    $cut_len = $len_file - $len_dir
    $cut = StringRight( $files[$a], $cut_len )
    $cut_list_items = StringSplit( $cut , "\" )
    $cut_last_item = StringLen( $cut_list_items[$cut_list_items[0]] )
    $cut_folder = StringLeft( $cut , Stringlen( $cut ) - $cut_last_item )
    If _has_subfolder( $files[$a] ) = 1 Then
    DirCreate( $dir2 & $cut_folder )
    FileCreateNTFSLink( $files[$a] , $dir2 & $cut , 1);)
    EndIf
    $a = $a + 2
    WEnd

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

    Func _has_subfolder( $dir )
    Local $a = _GetFilesFolder_Rekursiv( $dir, '*', 1,0 )
    If $a[0] = 0 Then
    return 1
    Else
    Return 0
    EndIf
    EndFunc

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='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
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard); 1 -@CR; 2 -@LF; oder beliebiges Zeichen
    ; 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, $sDelim='0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '0'
    $sDelim = @CRLF
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    EndSwitch
    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,$sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles,1), $sDelim)
    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, $Delim=@CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    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 & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc

    [/autoit]


    Es funktioniert, ich denke auch, ich habe alle überflüssigen Codezeilen draußen.
    Was sagt ihr?