Προς το περιεχόμενο

batch unrar commands μεσω WinRAR


Προτεινόμενες αναρτήσεις

Δημοσ.

Εφοσον ειναι multipart archive πως ειναι δυνατον να δουλεψει με ενα script που προσπαθει να τα αποσυμπιεσει ενα ενα?

 

Κανονικα μια εντολη πρεπει να ειναι στο πρωτο (η τελευταιο?) rar που αυτοματα θα δουλεψει σε ολα τα αρχεια.

Δεν ξερω πως γινεται αυτο σε Rar απο γραμμη εντολων, αλλα αν υποστηριζεται θα το λενε οι οδηγιες

Δημοσ.

Δουλεύει, απλά επειδή προσπαθεί να αποσυμπιέσει τα ίδια αρχεία από το κάθε κομμάτι των multipart πέφτει στη λούπα για το overwrite. Με τον διακόπτη -o- (overwrite off) απλά βλέπει ότι υπάρχουν τα αρχεία και προχωράει χωρίς να κάνει τίποτα. Με τον διακόπτη -y (assume yes to all questions) κάνει overwrite τα ίδια αρχεία συνέχεια και αυτό καθυστερεί άσκοπα τη διαδικασία.

 

EDIT:

Βρήκα το παρακάτω όμορφο προγραμματάκι

Link.png Site: ExtractNow

Έχεις αρκετές δυνατότητες και σε έναν test folder που το δοκίμασα δούλεψε άψογα. Οι μόνες αλλαγές που έκανα στα settings είναι στο Destination όπου τσέκαρα το Aytomaticaly extract files και επέλεξα Never overwrite it και στο Process τσέκαρα τα Extract files with-in archives, Recursevile delete or move files και Delete. Όποιος θέλει, μπορεί να πάει και στο monitor και να ορίσει έναν φάκελο για παρακολούθηση, οπότε ότι πέφτει εκεί θα αποσυμπιέζεται.

Δημοσ.

Τα switches δεν θέλουν "". Εκεί που το είδες το βάζουν σε εισαγωγικά για να ξεχωρίζει από το υπόλοιπο κείμενο.

 

Η αποσυμπίεση σε υποφάκελο που να έχει το όνομα του αρχείου γίνεται προσθέτοντας ένα "%%~nf\" στην εντολή αποσυμπίεσης στο script.

Η νέα έκδοση έχει ως εξής:

@echo off
for /R %%f in (*.rar) do (
cd "%%~pf"
"C:\Program Files\WinRAR\unrar.exe" x -o- *.rar "%%~nf\"
REM del "%%f"
)

Αφαίρεσα την set για να μην σε μπερδεύει και απενεργοποίησα και την del για να μη σβήνει τα αρχεία. Αν θέλεις να τα σβήνει κάνε όπως είπα στο 6ο Post. Διέγραψε το REM από τη γραμμή της del και διέγραψε τη γραμμή του unrar. Έτσι το μόνο που θα κάνει θα είναι να σβήσει τα αρχεία που αποσυμπίεσε.

Και ν' αφήσεις όμως την εντολή για το unrar δεν θα κάνει κάτι γιατί το -o- δηλώνει ότι δεν θα προσπαθήσει να κάνει overwrite τίποτα με αποτέλεσμα να μην ξανά-αποσυμπιέσει τα ίδια αρχεία.

 

για 10gb εχει κανει 20 λεπτα και δεν εχει σταματησει... Μηπως εχει μπει σε λουπα;

επισης

 

δοκιμασα αυτο αλλα δεν μου εσβησε τα rar μετα

 

@echo 
FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.rar *.zip) DO (
            "C:\Program Files\WinRAR\WinRAR.exe" x -o "%%X"
del "%%f"
        )
    popd
)
 
PAUSE
 
 
τι εχω κανει λαθος?
 
 
thanks 

edit 

 

αποσυμπιεσα το 10gb αρχειο με το αποπανω και μου πηρε λιγοτερο απο 10 λεπτα

 

ακυρο

μπηκε και αυτο σε λουπα

Δημοσ.

Δεν είναι λούπα. Παίζει ρόλο πόσα αρχεία έχει μέσα το rar. Αν είναι χιλιάδες μικρά αρχεία τότε λογικό είναι να πάρει αρκετή ώρα. Επίσης αποσυμπιέζεις στον ίδιο δίσκο, οπότε διαβάζει και γράφει στο ίδιο σημείο και αυτό καθυστερεί.

 

Όσο για το σκριπτάκι που δείχνεις, που το βρήκες, το έκανες μόνος σου; Ρωτάω γιατί η del είναι λάθος. Τις δίνεις να σβήσει del %%f αλλά η f κρατάει το όνομα του φάκελου από την 1η for και η del δεν σβήνει φακέλους, αυτό το κάνει η rd. Αν δούλευε η del θα σου έσβηνε όλο τον φάκελο μετά την αποσυμπίεση.

Το όνομα του rar το καταχωρείς στην x, οπότε άλλαξε το σε del "%%X"

Δεν έχει όμως κάτι το διαφορετικό από το δικό μου, απλά χρησιμοποιεί διπλή for αντί για μία που έβαλα εγώ, οπότε είναι ασφαλές να πούμε ότι το δικό μου είναι ποιο optimized από το δικό σου. :)

Δημοσ.

Δεν είναι λούπα. Παίζει ρόλο πόσα αρχεία έχει μέσα το rar. Αν είναι χιλιάδες μικρά αρχεία τότε λογικό είναι να πάρει αρκετή ώρα. Επίσης αποσυμπιέζεις στον ίδιο δίσκο, οπότε διαβάζει και γράφει στο ίδιο σημείο και αυτό καθυστερεί.

 

Όσο για το σκριπτάκι που δείχνεις, που το βρήκες, το έκανες μόνος σου; Ρωτάω γιατί η del είναι λάθος. Τις δίνεις να σβήσει del %%f αλλά η f κρατάει το όνομα του φάκελου από την 1η for και η del δεν σβήνει φακέλους, αυτό το κάνει η rd. Αν δούλευε η del θα σου έσβηνε όλο τον φάκελο μετά την αποσυμπίεση.

Το όνομα του rar το καταχωρείς στην x, οπότε άλλαξε το σε del "%%X"

Δεν έχει όμως κάτι το διαφορετικό από το δικό μου, απλά χρησιμοποιεί διπλή for αντί για μία που έβαλα εγώ, οπότε είναι ασφαλές να πούμε ότι το δικό μου είναι ποιο optimized από το δικό σου. :)

 

βασικα εκανε unzip συνεχεια το part1 Και εφταχνε ενα φακελο με το ονομα χχχχχχχ-part1

 

 

edit

 

και αλλο προβλημα. Θελω αν γινεται να ειναι σε ενα φακελο και οχι σε καθε ενα ξεχωριστα

 

OecosId.png

Δημοσ.

Τώρα μας βάζεις δύσκολα! :shock:

 

Τέλος πάντων, το έψαξα λίγο αλλά τον μόνο τρόπο που βρήκα ήταν να ενσωματώσω και έναν ακόμα βρόγχο for μόνο και μόνο για να ξεχωρίζει το .part από το όνομα αρχείου. Αν κάποιος ξέρει κάποιον άλλο τρόπο ή πως μπορεί το unrar να καταλαβαίνει ότι το archive είναι multi part και να συμπεριφέρεται ανάλογα ας τον πει να το φιξάρουμε.

@echo off
for /R %%f in (*.rar) do (
cd "%%~pf"
attrib -r *.*
if exist *.part01.rar (dir /b *.part01.rar >aaa) else dir /b *.rar >aaa

for /f "tokens=1 delims=." %%x in (aaa) do (
echo Extracting %%x...
echo Please wait
echo.
"C:\Program Files\WinRAR\unrar.exe" x -o- "%%~nf.rar" "%%x\">:null

echo Deleting archive %%x
del "%%x*.rar">:null
del aaa
)
)
pause

Το σκριπτάκι αυτό θα δουλέψει σωστά, μόνο και εφ όσον δεν περιέχετε άλλη τελεία στο όνομα των rar. Δηλαδή αν είναι 8Dio.SFZ.part01.rar τότε θα αποσυμπιέσει στον φάκελο 8Dio.

Επίσης δεν ψάχνει για multi parts του τύπου .00 .01 .02 κτλ

Για να διορθωθεί και να δουλεύει σε όλες τις περιπτώσει θέλει πλέων vbs ή κάποια γλώσσα προγραμματισμού ή ακόμα ποιο περίπλοκες for. Μετά όμως το σκριπτάκι θα είναι πολύ επιρρεπές σε σφάλματα.

Δημοσ.

Τώρα μας βάζεις δύσκολα! :shock:

 

Τέλος πάντων, το έψαξα λίγο αλλά τον μόνο τρόπο που βρήκα ήταν να ενσωματώσω και έναν ακόμα βρόγχο for μόνο και μόνο για να ξεχωρίζει το .part από το όνομα αρχείου. Αν κάποιος ξέρει κάποιον άλλο τρόπο ή πως μπορεί το unrar να καταλαβαίνει ότι το archive είναι multi part και να συμπεριφέρεται ανάλογα ας τον πει να το φιξάρουμε.

@echo off
for /R %%f in (*.rar) do (
cd "%%~pf"
attrib -r *.*
if exist *.part01.rar (dir /b *.part01.rar >aaa) else dir /b *.rar >aaa

for /f "tokens=1 delims=." %%x in (aaa) do (
echo Extracting %%x...
echo Please wait
echo.
"C:\Program Files\WinRAR\unrar.exe" x -o- "%%~nf.rar" "%%x\">:null

echo Deleting archive %%x
del "%%x*.rar">:null
del aaa
)
)
pause

Το σκριπτάκι αυτό θα δουλέψει σωστά, μόνο και εφ όσον δεν περιέχετε άλλη τελεία στο όνομα των rar. Δηλαδή αν είναι 8Dio.SFZ.part01.rar τότε θα αποσυμπιέσει στον φάκελο 8Dio.

Επίσης δεν ψάχνει για multi parts του τύπου .00 .01 .02 κτλ

Για να διορθωθεί και να δουλεύει σε όλες τις περιπτώσει θέλει πλέων vbs ή κάποια γλώσσα προγραμματισμού ή ακόμα ποιο περίπλοκες for. Μετά όμως το σκριπτάκι θα είναι πολύ επιρρεπές σε σφάλματα.

 

 

βασικα το αποκατω μου δουλευει

@echo 
FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.rar *.zip) DO (
            "C:\Program Files\WinRAR\WinRAR.exe" x -o- -y "%%X"
del "%%f"
        )
    popd
)
 
PAUSE
 

αλλα δεν μου σβηνει τα rar μετα...

 

:unsure:

Δημοσ.

Οντως, η χρήση του winrar αντί του unrar επιτρέπει τη σωστή αποσυμπίεση των multi part αρχείων, δεν ξέρω για ποιο λόγο αλλά έτσι είναι και εγώ μαζοχιζόμουν με το unrar.

Μόνο που έτσι που το χρησισμοποιείς δεν κάνει κάτι που ζήτησες στην αρχή, να αποσυμπιέζει δηλαδή σε φάκελο με το όνομα του rar.

Πρέπει να μπει και ένας επιπλέον διακόπτης -ad στο winrar που του λέει να προσθέσει το όνομα του rar στο path αποσυμπίεσης.

Εδώ το path δηλώνεται σωστά π.χ. για το archive.partoi.rar θα δημιουργήσει έναν φάκελο archive και θα αγνοήσει το part01, πράγμα που δεν μου το έκανε το unrar και αναγκάστηκα να προσθέσω μια λούπα μόνο για να καθαρίζει το όνομα του αρχείου από το .part και να μπορέσει να δημιουργήσει σωστά τον φάκελο.

Επίσης, επιμένεις να δίνεις εντολή να σβήσει τους φάκελους από την μεταβλητή %%f ενώ σου είπα ότι πρέπει να το αλλάξεις σε %%X.

Το δοκίμασα όμως αλλά επιμένει να μην σβήνει τα rar με μεταβλητή, οπότε πάμε στα wildcards *.zip και *.rar.

Το βελτιωμένο σκτιπτάκι είναι τα εξής:

@echo 
FOR /D /r %%F in ("*") DO (
    pushd %CD%
echo %cd%
    cd %%F
        FOR %%X in (*.rar *.zip) DO (
           "C:\Program Files\WinRAR\winRAR.exe" x -o- -y -ad "%%X"
		del *.zip
		del *.rar
        )
    popd
)
 
PAUSE
Δημοσ.

 

Οντως, η χρήση του winrar αντί του unrar επιτρέπει τη σωστή αποσυμπίεση των multi part αρχείων, δεν ξέρω για ποιο λόγο αλλά έτσι είναι και εγώ μαζοχιζόμουν με το unrar.

Μόνο που έτσι που το χρησισμοποιείς δεν κάνει κάτι που ζήτησες στην αρχή, να αποσυμπιέζει δηλαδή σε φάκελο με το όνομα του rar.

Πρέπει να μπει και ένας επιπλέον διακόπτης -ad στο winrar που του λέει να προσθέσει το όνομα του rar στο path αποσυμπίεσης.

Εδώ το path δηλώνεται σωστά π.χ. για το archive.partoi.rar θα δημιουργήσει έναν φάκελο archive και θα αγνοήσει το part01, πράγμα που δεν μου το έκανε το unrar και αναγκάστηκα να προσθέσω μια λούπα μόνο για να καθαρίζει το όνομα του αρχείου από το .part και να μπορέσει να δημιουργήσει σωστά τον φάκελο.

Επίσης, επιμένεις να δίνεις εντολή να σβήσει τους φάκελους από την μεταβλητή %%f ενώ σου είπα ότι πρέπει να το αλλάξεις σε %%X.

Το δοκίμασα όμως αλλά επιμένει να μην σβήνει τα rar με μεταβλητή, οπότε πάμε στα wildcards *.zip και *.rar.

Το βελτιωμένο σκτιπτάκι είναι τα εξής:

@echo 
FOR /D /r %%F in ("*") DO (
    pushd %CD%
echo %cd%
    cd %%F
        FOR %%X in (*.rar *.zip) DO (
           "C:\Program Files\WinRAR\winRAR.exe" x -o- -y -ad "%%X"
		del *.zip
		del *.rar
        )
    popd
)
 
PAUSE

 

 

ξεχασα να το κοιταξω αυτο. Θα το δοκιμασω και θα ποσταρω.

edit

 

εβγαλα το ενα switch για να δω τι γινεται αλλα δεν μου σβηνει τα rar.

 

SRI1xd9.png

Δημοσ.

Στο ss βλέπω ότι προσπαθεί να διαγράψει τα συμπιεσμένα μέσα από τον φάκελο όπου έχει κάνει την αποσυμπίεση και φυσικά δεν τα βρίσκει.

Εγώ που το δοκίμασα με έναν test folder πάντως μου τα έσβησε κανονικά.

Στο ss επίσης βλέπω ένα access is denied στο πάνω μέρος, τι είναι αυτό;

Ακόμα βλέπω ότι έχεις έναν φάκελο peavy revalver και μέσα σε αυτόν έναν άλλο φάκελο peave revalver με το ίδιο όνομα αλλά με τελείες σε κάθε λέξη. Είναι σωστό αυτό;

 

Πάντως, ακόμα και να μην στα σβήνει, αν σου αποσυμπιέζει τα αρχεία όπως θέλεις κάνε μετά ένα search για rar και σβήστα όλα μαζί.

Ή δοκίμασε ένα cd.. (με δύο τελείες κολλητά στο cd) πριν από τις del μήπως γυρνώντας στον προηγούμενο φάκελο καταφέρει να τα βρει.

 

Ένα ακόμα που πρέπει να σου επισημάνω, είναι ο περιορισμός των windows στο συνολικό μέγεθος σε χαρακτήρες του path με το όνομα αρχείου, που είναι στα 255. Όπως βλέπω, το path που αποσυμπιέζεις είναι ήδη περίπου στα μισά και δεν ξέρω πόσους υποφάκελους έχει το κάθε rar. Αν υπερβείς τους 255 χαρακτήρες (disk leter+path+filename+extention) τότε το λειτουργικό δε θα μπορεί να τα διαβάσει.

Δημοσ.

Στο ss βλέπω ότι προσπαθεί να διαγράψει τα συμπιεσμένα μέσα από τον φάκελο όπου έχει κάνει την αποσυμπίεση και φυσικά δεν τα βρίσκει.

Εγώ που το δοκίμασα με έναν test folder πάντως μου τα έσβησε κανονικά.

Στο ss επίσης βλέπω ένα access is denied στο πάνω μέρος, τι είναι αυτό;

Ακόμα βλέπω ότι έχεις έναν φάκελο peavy revalver και μέσα σε αυτόν έναν άλλο φάκελο peave revalver με το ίδιο όνομα αλλά με τελείες σε κάθε λέξη. Είναι σωστό αυτό;

 

Πάντως, ακόμα και να μην στα σβήνει, αν σου αποσυμπιέζει τα αρχεία όπως θέλεις κάνε μετά ένα search για rar και σβήστα όλα μαζί.

Ή δοκίμασε ένα cd.. (με δύο τελείες κολλητά στο cd) πριν από τις del μήπως γυρνώντας στον προηγούμενο φάκελο καταφέρει να τα βρει.

 

Ένα ακόμα που πρέπει να σου επισημάνω, είναι ο περιορισμός των windows στο συνολικό μέγεθος σε χαρακτήρες του path με το όνομα αρχείου, που είναι στα 255. Όπως βλέπω, το path που αποσυμπιέζεις είναι ήδη περίπου στα μισά και δεν ξέρω πόσους υποφάκελους έχει το κάθε rar. Αν υπερβείς τους 255 χαρακτήρες (disk leter+path+filename+extention) τότε το λειτουργικό δε θα μπορεί να τα διαβάσει.

 

 

βοηθησε με λιγο. Πως το γραφω αυτο;

 

 

Thanks

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...