Batch-Datei Winrar entpacken mit Passwortliste

===Neo===

Cadet 3rd Year
Registriert
Aug. 2010
Beiträge
56
Hallo zusammen,

wie das so ist, ich kriege Passwort und Archiv nicht mehr einander zugeordnet :rolleyes:. Die PW-Liste enthält ~300 Einträge und die einzeln durchzugehen ist ätzend.

Habe schon was im Netz diesbezüglich gefunden, aber nix laufendes. Mittels WinRAR-Hilfe bin ich soweit gekommen, dass ich entpacken kann via BATCH. Allerdings wird die Passwortliste mit dem Code nicht wirklich abgearbeitet. Der Befehl in Zeile 9: for /f loop ist mir schleierhaft. Die Beschreibungen im Netz sind für Laien nur schwer verständlich...:confused_alt:

Code:
set datei1=BACKUP.rar
set datei2=Passwortliste.txt
set var1=1
set path=C:\Users\Neo\Desktop\
cd %path%


:start
for /f "tokens=%var1%" %%i in (%datei2%) do set pw1=%%i
"C:\Program Files\WinRAR\UnRAR.exe" X -p%pw1% %datei1% %path%\Entpackt\
pause
goto start


:ende
echo ENDE
echo Passwort = %pw1%
pause
exit

Kann mir jemand weiterhelfen?
Auch ein Befehl zum Stoppen, wenn das PW gefunden ist wäre nice.

Danke und Grüße,
===Neo===
 
Zuletzt bearbeitet:
Beim JDownloader ist das ein eingebautes Feature - Entpacken mit Passwortliste. Ansonsten gibt es diverse Unrar-Tools, die das ebenfalls können ...
 
Tja, das ist ne kleines Bastelprojekt. Das goto brauchst du nicht, sondern klammern, die den Teil der mehrfach durchlaufen werden soll einbeziehen. Dann ist wichtig, wie deine Passwortliste ausschaut. Steht jedes PW in einer neuen Zeile brauchst du das "tokens" nicht, aber ein "delims=" falls ein Tab/Space im Passwort verwendet wird.
Dann ist die Frage ob von WinRar ein Errorcode gesetzt wird, wenn er korrekt entpackt. Vermutlich ja, aber ich habe den Ausgabepfad erweitert, da kannst du schauen wo was drinne ist. Das wird aber zu problemen führen, wenn das entsprechende Passwort nicht Dateisystem Kompatibel ist (Sonderzeichen z.B. : ), dann musst du deinen alten Entpackt Pfad nutzen.

for /f "delims=" %%i in (%datei2%) do (
echo Probiere Passwort: "%%i"
set pw1=%%i
"C:\Program Files\WinRAR\UnRAR.exe" X -p%%i %datei1% "%path%\Entpackt\%%i\"
echo Returncode %ERRORLEVEL%
if %ERRORLEVEL% == 0 (
echo Vermutlich PW %%i erfolgreich.
pause
)
)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: ===Neo===
@Andreas_: Das Tool kenne ich, ist aber nicht die Frage gewesen.

@kleiner_muck: Ja, bei meiner Passwortliste steht jedes PW jeweils in einer Zeile. Ich habe mal deinen Part reingebastelt (ohne ERROR, um analytisch vorzugehen). Ist ein witziger Effekt: in dem Ordner "Entpackt", wird nun bei jedem loop ein neuer Ordner erstellt, der jeweils den Namen des aktuellen Passworts besitzt. Nur beim richtigen PW wurde der Inhalt entpackt.... :-) Egal, ich habs gefixed:

Code:
set datei1=BACKUP.rar
set datei2=Passwortliste.txt
set var1=1
set path=C:\Users\Neo\Desktop

cd %path%
@echo off

:start
for /f "delims=" %%i in (%datei2%) do (
    echo.
    echo Probiere Passwort: "%%i"
    echo.
    "C:\Program Files\WinRAR\UnRAR.exe" X -p%%i %datei1% "%path%\Entpackt\"
    set pw1=%%i
)

:ende
echo ENDE
echo Passwort = %pw1%
pause
exit

Jetzt fehlt nur noch der Aussteiger aus dem loop. Das mit dem if %ERRORLEVEL% == 0 () geht leider nicht, da steigt der sofort nach dem ersten loop aus... Ich bräuchte sowas in funktionierend: if %path% is empty goto ende

LG ===Neo===
Ergänzung ()

Achja und nur zur Info, in der txt stehen nur trash Passwörter. Ich hatte damals alle Archive verschlüsselt, obwohl nix wichtiges drin war... Der Rest läuft safe über keepass!
 
Zuletzt bearbeitet:
Würde mir da einen allgemeinen Unzipper bauen, welcher per Drag&Drop auf dem Desktop bereitliegt.
WinRar nutze ich nicht. Freie Software rules: 7-zip

>Um anhand einer Passwortliste zeilenweise auszulesen:
Code:
@echo off
FOR /F %%i in (passwords.txt) do (
"C:\Program Files\7-Zip\7z.exe" e -p%%i "%1"
)

>Um die Passwortliste direkt in die Batch zu bauen, muß etwas Vorarbeit gemacht werden, da die Passwörter in einen SET-Befehl geschrieben werden. Alle Passwörter in eine Zeile (Leerzeichen dazwischen nicht vergessen
Code:
@echo off
set passwords=1111 abcd test TEST

(FOR %%i in (%passwords%) do (
"C:\Program Files\7-Zip\7z.exe" e -p%%i "%1"
))

oder untereinander die Passwörter schreiben. Diese werden mit dem ^ Zeichen (Zirkumflex; Taste unter ESC) getrennt. Auch hier die Leerzeichen beachten:
Code:
@echo off
set passwords=^
1111 ^
abcd ^
test ^
TEST

(FOR %%i in (%passwords%) do (
"C:\Program Files\7-Zip\7z.exe" e -p%%i "%1"
))

>Möchte man noch alles in einen bestimmten Ordner ENTpacken (beispielhaft nach C:\tmp) den Parameter -o setzen:
Code:
"C:\Program Files\7-Zip\7z.exe" e -p%%i "%1" -o"C:\tmp"
 
  • Gefällt mir
Reaktionen: ===Neo===
Neo:
In meinem einfachen Beispiel war es genau so gedacht, das du für jedes PW einen eigenen Ordner bekommst.

Laut https://documentation.help/WinRAR/HELPExitCodes.htm werden Errorcodes erzeugt.
if %ERRORLEVEL% == 0 (
echo PW = "%%i"
exit /b 0
)
hinter unrar, aber innerhalb der for schleife. Allerdings hängt das dann doch von Feinheiten ab, wie Unrar die Fehlercodes erzeugt. :Start und :Ende Makierungen brauchst du dann nicht mehr, aber eben nur wenn unrar einen Code ungleich 0 ausgibt, falls das PW nicht passt.
Mit "exit /b" beendest Du das Script ohne die Commandline zu beenden. Einen Errorcode kann auch gesetzt werden (0).

ryan_blackdrago:
7z ist natürlich universeller. Wenn aber ein PW mit Leerzeichen auftaucht hast du mit der Set Methode "alle PWs mit Leerzeichen getrennt" verloren.
 
===Neo=== schrieb:
@Andreas_: Das Tool kenne ich, ist aber nicht die Frage gewesen.
Dann hättest Du das vielleicht in Deinem Post erwähnen können.

Es gibt auch fertige Batch-Dateien für das Problem. Ist ja schließlich nichts Neues. Aber die kennst Du ja vermutlich ebenfalls und willst lieber das Rad neu erfinden ...
 
Hallo, ich hab mal dran gebastelt. Für die Forschleife musste man die DelayExpansion einschalten...
Das funktioniert bei mir:

Code:
@echo off
setlocal EnableDelayedExpansion
set _ArchivPath="Test.7z"
set _PassWordPath="Passwords.txt"
set _ExtractPath="Extract"
set _Zip="C:\Program Files\7-Zip\7z.exe"

call :FileExist _ArchivPath
if not %ERRORLEVEL% == 0 exit /b 1
call :FileExist _PassWordPath
if not %ERRORLEVEL% == 0 exit /b 1
call :FileExist _Zip
if not %ERRORLEVEL% == 0 exit /b 1

for /f "usebackq delims=" %%A in (%_PassWordPath%) do (
  echo.
  echo Probiere Passwort: "%%A".
  %_Zip% x -o%_ExtractPath% -p"%%A" -y %_ArchivPath%
  echo ERRORLEVEL[!ERRORLEVEL!]
  if !ERRORLEVEL! == 0 (
    echo.
    echo Passwort erfolgreich: "%%A".
    exit /b 0
  )
)
echo.
echo Kein Passwort passte.
exit /b 1

:FileExist
if not exist "!%1!" (
  echo %1 nicht gefunden.
  exit /b 1
)
exit /b 0
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: ===Neo===
@ kleiner_muck
Stimmt, wenn man die Passwörter in eine Zeile setzt, kann es zu Problemen kommen. Mit dem Zirkumflex gibt es keine Probleme.
Wenn ich mir den Code so anschaue, allein wegen der Wartbeikeit.. verzichtet man gerne auf Leerzeichen in Passwörtern.

Codes in BBcode setzen => code
 
  • Gefällt mir
Reaktionen: ===Neo===
Danke Jungs, ich habs nun verstanden und kann die Befehle auch auf andere Probleme anwenden.

LG
===Neo===
 
Zuletzt bearbeitet:
Zurück
Oben