romberto
Goto Top

String aus einer Datei in eine Textfile exportieren und zusammen mit einer anderen Datei in ein Zip-Archiv packen

Hallo,

mit dem Titel habe ich mich etwas schwer getan und ich hoffe, dass es durch meine Ausführung etwas verständlicher wird:

Ich habe diverse Ordner und Unterordner in denen passwortgeschützte .rar Dateien liegen. Neben diesen Dateien liegen im selben Ordner auch entsprechende .bat und .sh Dateien welche die geschützten Dateien entpacken sollen.

Das ganze sieht dann in etwa so aus:

Ordner
|
Unterordner
|
evtl. noch weitere Unterordner
|
Geschützte Datei 1.rar
Noch mehr Geschützte Dateien.rar
extract_file_Geschützte Datei 1.bat
extract_file_Geschützte Datei 1.sh
Weitere Unwichtige Dateien
|
Unterordner etc.


Die .bat Dateien sind prinzipiell gleich aufgebaut:

REM Titel
REM Autor
REM Datum
REM Inhaltsangabe
rar x "xxxxxxx.rar" -pPasswort
del "xxxxxxx.rar"

Nun hat sich allerdings zum einen im ursprünglichen Prozess der .bat / .sh Erstellung der Fehlerteufel eingeschlichen: "xxxxxxx.rar" entspricht nicht immer "Geschützter Dateinamen.rar". Zum anderen ist nicht mehr auf allen Systemen das Ausführen von Scripten erlaubt.

Daher soll nun das Passwort aus der .bat in einen Textdatei mit dem Namen "Passwort.txt" exportiert werden, welche dann zusammen mit der entsprechenden .rar datei in eine .zip Datei gepackt werden soll. Alle anderen Dateien sollen gelöscht werden. Einige .rar Dateien sind nicht geschützt und haben daher auch keine .bat oder .sh. Diese sollen ebenfalls in eine eigentständige .zip gepackt werden.

Ich würde mich sehr freuen, wenn sich jemand meines Problems annehmen könnte.

Viele Grüße

Robert

Content-Key: 315050

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

Printed on: April 16, 2024 at 18:04 o'clock

Member: Kraemer
Kraemer Sep 12, 2016 at 08:45:09 (UTC)
Goto Top
Moin,

da wirst du hier im Forum durchaus den einen oder anderen finden, der dir das gegen Bezahlung erstellen wird.

Gruß Krämer
Member: colinardo
Solution colinardo Sep 12, 2016 updated at 14:21:56 (UTC)
Goto Top
Hallo Robert,
hier ein Powershell-Skript das das abfackelt:
# Quellpfad der Dateien (Ordner wird inkl. Unterordner nach RAR-Dateien durchsucht)
$sourcepath = 'c:\romberto\source'  

if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}   

# Asemblies laden (benötigt mindestens .NET 4.5 und Powershell 3.0)
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.IO.Compression.FileSystem

gci $sourcepath -Filter *.rar -Recurse | ?{!$_.PSIsContainer} | %{
    # ZIP-Datei erstellen
    $zip = [System.IO.Compression.ZipFile]::Open("$($_.DirectoryName)\$($_.Basename).zip",[System.IO.Compression.ZipArchiveMode]::Create)  
    $basename = $_.BaseName
    $batch = gci $_.DirectoryName -Filter *.bat -recurse | ?{$_.Name -like "extract*$basename.bat"} | select -First 1  
    if ($batch){
        # Passwort extrahieren
        [regex]::match((gc $batch.FullName | out-string),'(?i)-p([^\r\n]+)').Groups[1].Value | set-content "$env:TEMP\Passwort.txt" -Force  
        # Dateien spezifizieren die zur ZIP-Datei hinzugefügt werden
        $files = @("$env:TEMP\Passwort.txt",$_.FullName)  
    }else{
        # keine zugehörige Batch vorhanden (es landet nur das RAR im ZIP)
        $files = $_.FullName
    }
    # Dateien zu ZIP hinzufügen
    $files | %{[void][System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zip,$_,[System.IO.Path]::GetFileName($_))}
    # Ressourcen freigeben
    $zip.Dispose()
}
 # Quelldateien löschen
    Remove-Item "$sourcepath\*" -Recurse -Include *.rar,*.bat,*.sh -Force -EA Ignore  

Viel Spaß
Grüße Uwe

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Member: romberto
romberto Sep 12, 2016 at 14:06:06 (UTC)
Goto Top
Hallo Uwe,

Perfekt! Vielen Dank für deine Mühe. Ich musste das Skript wirklich nur minimalst anpassen:

In deiner Version geht das Skript davon aus, dass nur eine .rar Datei pro Ordner existiert -> durch den Löschbefehl, werden nach dem ersten erfolgreichen packen, sämtliche übrigen Dateien gelöscht. Auch diejenigen, die noch zu bearbeiten wären.

Ich habe den Löschbefehl nun einfach in ein seperates Skript gepackt, welches ich am Ende nochmal drüber laufen lasse. Funktioniert alles einwandfrei und ist auch kein Mehraufwand.

Mit ein paar Dateien gibt es noch ´Fehler und zwar wenn "-P" im Dateinamen vorkommt. Dann geht das Skript davon aus, dass der rest des Dateinamens das Passwort sei. Das sind allerdings nur insgesamt 3-4 Dateien, welche ich auch problemlos von Hand bearbeiten kann face-wink

Wirklich, vielen, vielen Dank für diese immense Zeitersparniss.

Grüße

Robert
Member: colinardo
colinardo Sep 12, 2016 updated at 14:27:31 (UTC)
Goto Top
Zitat von @romberto:
In deiner Version geht das Skript davon aus, dass nur eine .rar Datei pro Ordner existiert -> durch den Löschbefehl, werden nach dem ersten erfolgreichen packen, sämtliche übrigen Dateien gelöscht. Auch diejenigen, die noch zu bearbeiten wären.
Uups sorry, da habe ich die Löschung an der falschen Stelle platziert, ist oben korrigiert.

Mit ein paar Dateien gibt es noch ´Fehler und zwar wenn "-P" im Dateinamen vorkommt. Dann geht das Skript davon aus, dass der rest des Dateinamens das Passwort sei.
Leider war nicht ersichtlich wie der gesamte rar Befehl in deinen Dateien aussieht und an welcher Stelle der Parameter steht, der Regex hätte sich dann optimal anpassen lassen face-smile

Wirklich, vielen, vielen Dank für diese immense Zeitersparniss.
You're welcome.

Du kannst dich ja von Zeit zu Zeit mal revanchieren wenn du im Forum mit uns dein geballtes Wissen teilst face-smile.

Grüße Uwe