Top-Themen

Aktuelle Themen (A bis Z)

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, 9257 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 ..
Ähnliche Inhalte
Batch & Shell
Batch: Dateien in einen Ordner verschieben, wenn sie im Zielordner nicht schon vorhanden sind
gelöst Frage von SinzalBatch & Shell7 Kommentare

Hallo Leute, ich bin neu im Forum und versuche mich an meiner ersten Frage. Bitte habt etwas Nachsicht, wenn ...

Entwicklung
AutoIT Dauerschleife
gelöst Frage von mrcljnffEntwicklung5 Kommentare

Moin, ich benötige einen befehl der mir mein AutoIt script, in eine Dauerschleife verwandelt. Selber habe ich den dafür ...

Batch & Shell
Bestimmte Datei per Batch in Ordner kopieren, wenn bestimmte .Ext in Ordner vorhanden
Frage von ConcurveBatch & Shell5 Kommentare

Hallo zusammen, aufgrund Speicher-Limitierung in meinem PC muss ich nun meine *.mov, *.avi, etc. vom PC entfernen, so dass ...

Batch & Shell
Batch - Verzeichnisnamen mit Dateinamen vergleichen, wenn vorhanden eine .log-Datei kopieren und zu .txt umbenennen
gelöst Frage von BlattlausOGBatch & Shell9 Kommentare

Hallo, ich versuche gerade vergeblichst über die Google-Suche ein passendes Script für meine Anwendung zu finden, doch leider scheint ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 106 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
Frage von HelloWorldBatch & Shell16 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

Windows Server
Ping auf einen bestimmten Server nicht möglich
gelöst Frage von a.thierWindows Server7 Kommentare

Hallo, ich habe folgendes Problem. srv-dc1: Ping srv-nav > geht Ping srv-exchange > geht nicht srv-exchange: Ping srv-dc1 > ...

Hardware
Fujitsu Workstation mit K80 und Quadro P5000, Fehlermeldung: Connect Power Adapter
Frage von MachelloHardware7 Kommentare

Hallo Zusammen, ich benötige euren Rat da ich ratlos bin. Folgende Konfiguration im Büro: Fujitsu Workstation Celcius R940 Power ...