inferior
Goto Top

AutoIt - Ordner ausfiltern in dateinamen packen batch umsetzung vorhanden

Hallo liebe gemeinde ;)

mein problem ist das ich versuche ein programm in autoit zu übersetzen.

die sache ist die:

bekannt ist ein teilpfad:
zB "c:\beispiel\test\"

bekannt ist es gibt 2 dateien
zB "datei1.txt" und "datei2.txt"

bekannt ist, dass zwischen dem teilpfad und den beiden dateien nur ein ordner unbekanntem namens liegt
die beiden dateien sind im selben (unbekannten) ordner

ziel ist es, den namen des unbekannten ordners heraus zu finden und die beiden dateien in den temp-ordner zu kopieren
dort werden sie gezippt und die zip erhält den namen des eben herausgefundenen ordners

die sache ist das es unter umständen auch mehrere ordner nach dem teilpfad geben kann, die diese beiden dateien beinhalten.
am ende sollten dann im temp-ordner die gezippten dateien aller dieser unbekannten ordner der genannten dateien drin sein.
ist bisschen kompliziert geschrieben aber die lösung ist auf alle fälle umzusetzen wenn mans verstanden hat.
ich bin leider noch nicht lange mit autoit am gange.


hab das mal in batch umgesetzt das funktioniert und die prozedur brauch ich nun in autoit:

set "Basis="c:\beispiel\test\"
set "Datei1=datei1.txt"
set "Datei2=datei2.txt"
for /f "delims=" %%i in ('dir /s /b "%Basis%%Datei1%"') do call :ProcessDir "%%i"
goto next

:ProcessDir

set "Pfad=%~dp1"
call set "RelPfad=%%Pfad:%Basis%=%%"

xcopy /Q/Y "c:\beispiel\test\%RelPfad:~,-1%\%Datei1%" "%temp%\%RelPfad:~,-1%\"
xcopy /Q/Y "c:\beispiel\test\%RelPfad:~,-1%\%Datei2%" "%temp%\%RelPfad:~,-1%\"


zip32 "%temp%\%RelPfad:~,-1%" "%temp%\%RelPfad:~,-1%.zip"


über eure vorschläge freu ich mich schon und bedanke mich schon mal.

gruß Inferior

Content-ID: 144513

Url: https://administrator.de/contentid/144513

Ausgedruckt am: 17.11.2024 um 11:11 Uhr

CadelPigott
CadelPigott 10.06.2010 um 09:19:16 Uhr
Goto Top
Hallo Inferior,

mal sehen ob ich dein Problem richtig erkannt habe.
Zunächst würde ich alle Dateipfade in ein Array setzen, welches z.B. für
$Array[1] = "C:\pfad\datei.dat"
$Array[2] = "C:\pfad2\datei.dat"
usw liefert.

Das sollte in etwa so gehen: http://www.autoit.de/index.php?page=Thread&threadID=5191

Das Array $Array[$i] lässt sich dann in eine Schleife packen die nur die Pfade in eine weiteres Array schreibt welches nur die Pfade enthält die nicht die bekannten Verzeichnisse enthält.

Aus dem Gedächnis müsste das in etwa so aussehen:

For $i = 1 to $Array
Select
Case Not StringInStr($Array[$i] = "Pfad"
$String=$String&@CRLF&$Array[$i]
EndSelect
Next

Jetzt hast du eine Liste mit Ordnern und Pfaden die "unbekannt" sind.
Anschließend brauchst du nur noch eine Funktion die die Zipdateien erstellt.

Hoffe ich hab´s einigermaßen verständlich erklärt face-smile

Gruß
Cadel Pigott
Inferior
Inferior 10.06.2010 um 12:08:17 Uhr
Goto Top
Hallo Cadel Pigott,

ich danke dir für deine antwort. diese hat mich auf alle fälle schon ein stück weiter geholfen..
nur stellen sich mir einige fragen:
ich soll den pfad in ein array packen aber der pfad der dateien ist mir ja nich zu 100% bekannt..
also was genau kommt jetzt in $array[1] und 2 usw

könntest du mir bei deinem code-schnippsel daneben schreiben was das script in der entsprechenden zeile macht..
ich muss mich dort erst eindenken und habs noch nicht ganz verstanden.

hab mir deinen link mal angesehn.. ist wirklich sehr beeindruckend was die dort gecoded haben aber an sich ist es nicht ganz das was ich suche..
sie durchsuchen ganze strukturen und geben alle dateien und unterordner an die in dem pfad liegen
ich jedoch brauche nicht mal eine ausgabe..
nur die isolierung des unbekannten ordners der zwischen teilpfad und datei1.txt und datei2.txt liegt
dieser soll auch nicht ausgegeben werden sondern am besten nur in eine variable oder ähnliches geschoben werden,
damit ich die variablen später für den namen des neuen ordners verwenden kann und diesen dann zippe.
so hat die zip-datei den selben namen wie der unbekannte ordner.
wie gesagt es können auch mehrere unbekannte ordner existieren, die die besagten dateien besitzen.
alle sollen alle gezippt werden.

zusammengefasst:

c:\beispiel\test\unbekannter_ordner1\datei1.txt ---> nach @tempdir & "\unbekannter_ordner1\datei1.txt"
c:\beispiel\test\unbekannter_ordner1\datei2.txt ---> nach @tempdir & "\unbekannter_ordner1\datei2.txt"
.
.
.
c:\beispiel\test\unbekannter_ordneX\datei1.txt ---> nach @tempdir & "\unbekannter_ordnerX\datei1.txt"
c:\beispiel\test\unbekannter_ordnerX\datei2.txt ---> nach @tempdir & "\unbekannter_ordnerX\datei2.txt"


danach wird das ganze gezippt..

gruß Inferior
CadelPigott
CadelPigott 10.06.2010 um 14:23:58 Uhr
Goto Top
Zitat von @Inferior:
Hallo Cadel Pigott,
Nochmal hallo face-smile

ich danke dir für deine antwort. diese hat mich auf alle fälle schon ein stück weiter geholfen..
nur stellen sich mir einige fragen:
ich soll den pfad in ein array packen aber der pfad der dateien ist mir ja nich zu 100% bekannt..
also was genau kommt jetzt in $array[1] und 2 usw
Hast du den Link oben mal besucht? Da findest du ein Script welches dir aus einem bestimmten Pfad Unterpfade und Dateinamen ausliest.
Somit mußt du den Dateinamen nicht wissen. Du mußt nur alle Dateinamen und Verzeichnisse quasi aus dem Array filtern die du nicht möchtest.
Hierbei hilft dir mein Codeschnipsel (siehe oben).

könntest du mir bei deinem code-schnippsel daneben schreiben was das script in der entsprechenden zeile macht..
ich muss mich dort erst eindenken und habs noch nicht ganz verstanden.
Puuh, ganz schöne Aufgabe verlangst du da face-smile
Vielleicht finde ich später noch Zeit dafür.

hab mir deinen link mal angesehn.. ist wirklich sehr beeindruckend was die dort gecoded haben aber an sich ist es nicht ganz das
was ich suche..
sie durchsuchen ganze strukturen und geben alle dateien und unterordner an die in dem pfad liegen
ich jedoch brauche nicht mal eine ausgabe..
nur die isolierung des unbekannten ordners der zwischen teilpfad und datei1.txt und datei2.txt liegt
Du mußt ja die Liste der Verzeichnisse auch nicht ausgeben sondern das Ergebnis des Arrays einfach weiter verarbeiten.
Die Ausgabe ist nur EINE Möglichkeit.

dieser soll auch nicht ausgegeben werden sondern am besten nur in eine variable oder ähnliches geschoben werden,
damit ich die variablen später für den namen des neuen ordners verwenden kann und diesen dann zippe.
so hat die zip-datei den selben namen wie der unbekannte ordner.
wie gesagt es können auch mehrere unbekannte ordner existieren, die die besagten dateien besitzen.
alle sollen alle gezippt werden.
Um Dateien zu zippen gibts sicherlich auch eine Lösung. Such einfach mal bei der Suchmaschine deiner Wahl nach "Autoit 7zip udf" .
Da findest du bestimmt einiges.


zusammengefasst:

c:\beispiel\test\unbekannter_ordner1\datei1.txt ---> nach @tempdir & "\unbekannter_ordner1\datei1.txt"
c:\beispiel\test\unbekannter_ordner1\datei2.txt ---> nach @tempdir & "\unbekannter_ordner1\datei2.txt"
.
.
.
c:\beispiel\test\unbekannter_ordneX\datei1.txt ---> nach @tempdir & "\unbekannter_ordnerX\datei1.txt"
c:\beispiel\test\unbekannter_ordnerX\datei2.txt ---> nach @tempdir & "\unbekannter_ordnerX\datei2.txt"


danach wird das ganze gezippt..

gruß Inferior
Gruß
Cadel
Inferior
Inferior 10.06.2010 um 15:04:35 Uhr
Goto Top
nun Cadel,

kannst du nicht mal ein beispiel geben.. ich irre hier schon seit stunden durch verschiedene tutorials und foren
aber ein solch explizites verfahren konnte ich noch nicht finden.

verstanden habe ich jetzt.

ich kann im teilpfad alle dateien und unterordner herausfinden
dort muss ich alles herausfiltern was ich nicht brauche O.o (um letztendlich in irgend einem array oder variable den namen des unbekannten ordnerszu haben)

um die zippfunktion hab ich mich schon gekümmert

wäre es denn nicht möglich dies schon mal vorab anzufertigen
ich weiß gar nicht wie ich beginnen soll face-sad

wäre dir wirklich sehr dankbar

gruß Inferior
Inferior
Inferior 10.06.2010 um 18:45:36 Uhr
Goto Top
hab die lösung gefunden
hab mich nochmal durch sämtliche tutorials und hilfe-foren usw gekämpft

getestet

#include <File.au3>
#include <Array.au3>

$sPath = 'c:\beispiel\test\'  
$sFile1 = 'datei1.txt'  
$sFile2 = 'datei2.txt'  
$aDirs = _FileListToArray($sPath, '*', 2) ; das Array $aDirs enthält die Namen der Unterverzeichnisse von $sPath  
If Not @error Then
    For $i = 1 To $aDirs ; alle gefundenen Unterverzeichnisse durchgehen
        If FileExists($sPath & $aDirs[$i] & '\' & $sFile1) Then FileCopy($sPath & $aDirs[$i] & '\' & $sFile1, @TempDir & '\' & $aDirs[$i] & '\', 9) ; wenn die Datei existiert nach TempDir kopieren  
        If FileExists($sPath & $aDirs[$i] & '\' & $sFile2) Then FileCopy($sPath & $aDirs[$i] & '\' & $sFile2, @TempDir & '\' & $aDirs[$i] & '\', 9) ; wenn die Datei existiert nach TempDir kopieren  
    Next
EndIf
CadelPigott
CadelPigott 11.06.2010 um 08:40:24 Uhr
Goto Top
Hey, sieht doch prima aus!
Gern geschehen face-smile

Gruß
Cadel