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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 144513
Url: https://administrator.de/contentid/144513
Ausgedruckt am: 17.11.2024 um 11:11 Uhr
6 Kommentare
Neuester Kommentar
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
Gruß
Cadel Pigott
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
Gruß
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.
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
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
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.
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
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" .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.
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
Cadel