Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

AutoIt - Ordner ausfiltern in dateinamen packen batch umsetzung vorhanden

Frage Entwicklung

Mitglied: Inferior

Inferior (Level 1) - Jetzt verbinden

09.06.2010, aktualisiert 10.06.2010, 8866 Aufrufe, 6 Kommentare

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
Mitglied: CadelPigott
10.06.2010 um 09:19 Uhr
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[0]
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

Gruß
Cadel Pigott
Bitte warten ..
Mitglied: Inferior
10.06.2010 um 12:08 Uhr
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
Bitte warten ..
Mitglied: CadelPigott
10.06.2010 um 14:23 Uhr
Zitat von Inferior:
Hallo Cadel Pigott,
Nochmal hallo

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
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
Bitte warten ..
Mitglied: Inferior
10.06.2010 um 15:04 Uhr
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

wäre dir wirklich sehr dankbar

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

getestet

01.
#include <File.au3> 
02.
#include <Array.au3> 
03.
 
04.
$sPath = 'c:\beispiel\test\' 
05.
$sFile1 = 'datei1.txt' 
06.
$sFile2 = 'datei2.txt' 
07.
$aDirs = _FileListToArray($sPath, '*', 2) ; das Array $aDirs enthält die Namen der Unterverzeichnisse von $sPath 
08.
If Not @error Then 
09.
    For $i = 1 To $aDirs[0] ; alle gefundenen Unterverzeichnisse durchgehen 
10.
        If FileExists($sPath & $aDirs[$i] & '\' & $sFile1) Then FileCopy($sPath & $aDirs[$i] & '\' & $sFile1, @TempDir & '\' & $aDirs[$i] & '\', 9) ; wenn die Datei existiert nach TempDir kopieren 
11.
        If FileExists($sPath & $aDirs[$i] & '\' & $sFile2) Then FileCopy($sPath & $aDirs[$i] & '\' & $sFile2, @TempDir & '\' & $aDirs[$i] & '\', 9) ; wenn die Datei existiert nach TempDir kopieren 
12.
    Next 
13.
EndIf
Bitte warten ..
Mitglied: CadelPigott
11.06.2010 um 08:40 Uhr
Hey, sieht doch prima aus!
Gern geschehen

Gruß
Cadel
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Dateinamen umschreiben batch (5)

Frage von jocheng zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateien mit Teil des Dateinamen per Batch in Unterordner verschieben (14)

Frage von smitternacht zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Router & Routing
gelöst Empfehlung günstiges ADSL2+ nur Modem (10)

Frage von TimMayer zum Thema Router & Routing ...

Server-Hardware
Lenovo Server System X 3650 M5 Festplatten (9)

Frage von Hendrik2586 zum Thema Server-Hardware ...