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

batch unrar commands μεσω WinRAR


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

Δημοσ.

λοιπον εχω απειρους φακελους με rar μεσα σε ενα φακελο. Υπαρχει περιπτωση να φτιαχτει ενα batch αρχειο που να κανει extract τα αρχεια και μετα να σβηνει τα rar files?

 

για αρχη εχω βρει οτι θα πρεπει να βρω το winrar path variable

set path="C:\Program Files\WinRAR\";%path%

 

επισης το command Που με ενδιαφερει ειναι το 

unrar x

 

http://linux.die.net/man/1/unrar

 

So, τι αλλα arguments θα πρεπει να βαλω?

 

thanks

Δημοσ. (επεξεργασμένο)

Το batch είναι το παρακάτω:

@echo off
set zp="C:\Program Files\7-zip\7z.exe"
for /R %%f in (*.rar) do (
cd "%%~pf"
@%zp% x -y *.rar
REM @del /F /Q "%%f"
)

Σώσε το bat στον κεντρικό φάκελο όπου θέλεις να ξεκινήσει η διαδικασία.

 

Στην 2η γραμμή, στην εντολή set θα βάλεις μέσα στα "" το πλήρες path και το όνομα του εκτελέσιμου του 7zip. Εγώ έβαλα αυτό που δείχνεις στο δικό σου σκριπτάκι. Αν είναι κάτι άλλο διόρθωσε το.

 

Υπ' όψιν, με την παράμετρο x τα αρχεία θα αποσυμπιέζονται στον φάκελο όπου βρίσκεται το rar. Αν μέσα στο rar υπάρχουν υποφάκελοι, αυτοί θα αποσυμπιέζονται κανονικά με το πλήρες path τους.

 

Το @ δεν εμφανίζει τα μηνύματα που κανονικά θα εμφάνιζε η εντολή για να μην γεμίζει το παράθυρο. Αν θέλεις να βλέπεις τι αποσυμπιέζει σβήστο. Αν το σβήσεις όμως και είναι πάρα πολλά τα αρχεία θα καθυστερήσει αρκετά η διαδικασία.

 

Επίσης, η παράμετρος -y θεωρεί σε όλες τις ερωτήσεις του 7zip ότι απαντάς Yes, δηλαδή στα overwrite κτλ.

 

Φαντάζομαι ότι είναι αυτό που ζητάς. Το δοκίμασα και δουλεύει κανονικά σε ένα δοκιμαστικό φάκελο που έκανα.

 

Τέλος, η del θα σβήσει τα rar όπως και να 'χει χωρίς να επιβεβαιώσει αν αποσυμπιέστηκαν σωστά, οπότε να έχεις πρόχειρο ένα backup σε περίπτωση που υπάρξει κάποιο πρόβλημα με τις αποσυμπιέσεις. Γι' αυτόν τον λόγο την έβαλα μετά από REM. ΑΝ δεν σε απασχολεί και έχεις backups σβήσε το REM από μπροστά. Αλλιώς μπορείς να κάνεις μετά μια αναζήτηση για *.rar στον φάκελο και να τα σβήσεις στο τέλος, αφού έχεις βεβαιωθεί ότι όλα πήγαν καλά.

Εναλλακτικά μπορείς να τρέξεις κανονικά το σκριπτάκι και αφού βεβαιωθείς ότι όλα πήγαν καλά να διαγράψεις την εντολή "@%zp x -y *.rar" και το REM μπροστά από την DEL και να το ξανατρέξεις για να διαγράψεις ότι rar βρει.

Επεξ/σία από micos000
  • Like 3
Δημοσ.

δεν δουλευει :(

 

dnSEPIr.png

 

 

Επισης μπορεις να μου εξηγησεις τι εστι:

/R = ?

%%f = loop?

in = operator?

"%%~pf = ?

/F = ?

/Q = ?

REM = ?

 

 

thanks


edit

 

μετα απο καμποσο ψαξιμο βρηκα αυτο και δειχνει να δουλευει καπως

 

@echo 
FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.rar *.zip) DO (
            "C:\Program Files\7-zip\7z.exe" x "%%X"
        )
    popd
)
 
PAUSE
 
το προβλημα ειναι οτι δεν δουλευει σε καποιους φακελους. μετα απο λιγο ψαξιμο ειδα οτι τα αρχεια αυτων των φακελων ειχαν την εξης ιδιαιτεροτητα 
 
iG75d6q.png
 
υπαρχει περιπτωση να φταιει αυτο;
Δημοσ.

Το batch είναι το παρακάτω:





@echo off
set zp="C:\Program Files\7-zip\7z.exe"
for /R %%f in (*.rar) do (
cd "%%~pf"
@%zp x -y *.rar
REM @del /F /Q "%%f"
)

με μια μικρη διορθωση χωρις το zp= μπροστα  και διπλα μετα το path του 7zip.exe οπου χ folder path αποσυμπιεσης καπως ετσι

@echo off

"C:\Program Files\7-zip\7z.exe" x "c:\Users\folder\rar"

for /R %%f in (*.rar) do (

cd "%%~pf"

@%zp x -y *.rar

@del /F /Q "%%f"

)

Δημοσ.

@μπουρτόβλαχος, φίλε δεν έχει πρόβλημα στη δήλωση της μεταβλητής με την set αλλά στην ανάκτηση της για την αποσυμπίεση.

 

Το πρόβλημα είναι στο %zp που θέλεις ένα ακόμα % μετά για να αναγνωριστεί σαν μεταβλητή, δηλαδή

@%zp% x -y *.rar

αντί για

@%zp x -y *.rar

@viper2005

Όσο για το unblock, αυτό το διορθώνεις εύκολα. Κατέβασε το zip από εδώ και ακολούθησε τις οδηγίες. Μετά πάρε την κυριώτητα (take ownership) από τον όλον τον φάκελο και ξανατρέξε το σκριπτάκι (με διορθωμένη την %zp% ).

Αυτό το σκριπτάκι που χρησιμοποίησες κάνει το ίδιο με αυτό που σου έδωσα, απλά δεν χρειάζεσαι τις εντολές pushd και popd, οι οποίες το μόνο που κάνουν είναι να αποθηκεύουν τον τρέχοντα φάκελο (pushd) στην αρχή και να τον ανακτούν (popd) στο τέλος έτσι ώστε να σε επιστρέφει στον φάκελο όπου εκτέλεσες ο script. Αυτό έχει νόημα μόνο όταν τρέχεις το script από command prompt για να μην αναγκαστείς μετά να κάνεις cd.. μέχρι να επιστρέψεις στον αρχικό φάκελο. Όταν το τρέχεις σαν bat αρχείο από την εξερεύνηση δεν χρησιμεύει σε τίποτα.

 

Όσο για την απορεία σου με τους operators της for...

 

/R = προχωράει και στους υποφάκελους και όχι μόνο στον τρέχοντα φάκελο

%%f = αυτή είναι η βασική μεταβλητή που θα παίρνει τιμές από την for και δεν είναι ανάγκη να είναι το f, μπορεί να είναι οποιοδήποτε γράμμα.

in = τι θα ψάχνει η for, στην περίπτωση σου για αρχεία με κατάληξη rar (*.rar) και θα τα περνάει στην μεταβλητή %%f

"%%~pf = παίρνει μόνο το path της τιμής της μεταβλητής (f) χωρίς το γράμμα του δίσκου. Άλλες περιπτώσεις είναι %%nf=μόνο το όνομα του αρχείου χωρίς το path, %%~ff=όλο το path μαζί με το γράμμα δίσκου κτλ. Δεν χρησιμοποίησα το %%~ff γιατί το 7zip δεν δεχόταν απόλυτο path (C:\xxx\yyy\aaa.rar) για παράμετρο και ήθελε χωρίς το γράμμα δίσκου (xxx\yyy\aaa.rar).

/F =είναι η βασική παράμετρος της for για loop (όχι το /R που ρώτησες στην αρχή.)

/Q =αυτό που το είδες; Η for παίρνει μόνο /D (όταν οι χαρακτήρες μπαλαντερ * και ? χρησιμοποιούνται για ονόματα φακέλων και όχι αρχείων) /R (για επεξεργασία υποφακέλων) /L (όταν η δηλωμένη ομάδα είναι ακολουθία αριθμών με αρχή, βήμα και τέλος, π.χ. 0,2,10 δλδ από το ο μέχρι το 10 ανά 2) ή /F (το βασικό για loop της for)

REM = αυτό δηλώνει ότι, ότι ακολουθεί μετά την rem και μέχρι το τέλος της γραμμής είναι σχόλιο (remark) και να αγνοηθεί. Στο σκριπτάκι μου αγνοείτε την del γιατί έχει μπροστά το REM. Γι αυτό σου είπα ότι αν όλα πάνε καλά σβήσε το rem από την del και βάλε ένα μπροστά από την %zp% ή σβήσε τελείως την γραμμή με την %zp%.

 

Βασικά η for είναι μια πολύ ισχυρή εντολή στα batch αρχεία και θέλει αρκετό δούλεμα για να καταλάβεις πως δουλεύει. Μπορείς να δώσεις σε command prompt την παρακάτω εντολή

for /?

για να δεις όλες τις παραμέτρους της. Δες εδώ για χρήση της for, καθώς και τα related στο τέλος της σελίδας για της παραμέτρους r d l f. Στο site έχει βοήθειες και για τις υπόλοιπες εντολές για batch scripting.

  • Like 1
Δημοσ.

Το εκανα αυτό με το take ownership αλλ δεν του έκανε κούκου. Θα δοκιμασω το batch σου αργότερα.

 

Thanks

Δημοσ.

Μπορείς να κάνεις μια αναζήτηση για όλα τα αρχεία rar στον φάκελο και αφού τα επιλέξεις όλα στο παράθυρο με τα αποτελέσματα να πας ιδιότητες και να κάνεις unblock καθώς και να αφαιρέσεις το read only.

Δημοσ.

Ο φάκελος είναι 1 tb και από τι βλέπω δεν είναι όλα τα αρχεία σε τέτοια φάση. Θα το κοιτάξω.

Δημοσ.

το ετρεξα το scriptaki σου αλλα παιρνω το απο κατω 

 

JpjRiap.png

 

 

@echo 
 
set zp="C:\Program Files\7-zip\7z.exe"
for /R %%f in (*.rar) do (
cd "%%~pf"
@%zp% x -y *.rar 
)
 
PAUSE
 
 
μετα δοκιμασα αυτο
 
@echo 
FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.rar *.zip) DO (
            "C:\Program Files\7-zip\7z.exe" x "%%X"
        )
    popd
)
 
PAUSE
 
και ουτε αυτο ετρεξε
μετα προσπαθησα να το ανοιξω με το 7zip αλλα πηρα ενα σφαλμα του στυλ "cant open file". To δοκιμασα με το winrar Και ανοιξε κανονικα...
 
δαιμονισμενο ειναι;

edit

 

αλλαξα το path απο 

 

C:\Program Files\7-zip\7z.exe

σε

C:\Program Files\WinRAR\WinRAR.exe

 

και δουλεψε καπως. Το προβλημα ειναι οτι εχει το παρακατω διαλογο...

 

54brknB.png

 

παιζει να φτιαχτει καπως;

 

thanks 


edit στο edit  :-D

 

ψαχνωντας το argument/switch εδω

http://acritum.com/software/manuals/winrar/

 

βρηκα το "-y" και εφτιαξε καπως.

 

@echo 
FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.rar *.zip) DO (
            "C:\Program Files\WinRAR\WinRAR.exe" x "-y" "%%X"
        )
    popd
)
 
PAUSE
 
 
 
ερωτηση
 
μπορει να διαβασει καποιος τα switch και να μου πει αν υπαρχει γραμμα για
 
delete files after extraction
και
extract files to a folder που θα εχει το ονομα του rar?
 
 
thanks 

 

 

/R = προχωράει και στους υποφάκελους και όχι μόνο στον τρέχοντα φάκελο

%%f = αυτή είναι η βασική μεταβλητή που θα παίρνει τιμές από την for και δεν είναι ανάγκη να είναι το f, μπορεί να είναι οποιοδήποτε γράμμα.

in = τι θα ψάχνει η for, στην περίπτωση σου για αρχεία με κατάληξη rar (*.rar) και θα τα περνάει στην μεταβλητή %%f

"%%~pf = παίρνει μόνο το path της τιμής της μεταβλητής (f) χωρίς το γράμμα του δίσκου. Άλλες περιπτώσεις είναι %%nf=μόνο το όνομα του αρχείου χωρίς το path, %%~ff=όλο το path μαζί με το γράμμα δίσκου κτλ. Δεν χρησιμοποίησα το %%~ff γιατί το 7zip δεν δεχόταν απόλυτο path (C:\xxx\yyy\aaa.rar) για παράμετρο και ήθελε χωρίς το γράμμα δίσκου (xxx\yyy\aaa.rar).

/F =είναι η βασική παράμετρος της for για loop (όχι το /R που ρώτησες στην αρχή.)

/Q =αυτό που το είδες; Η for παίρνει μόνο /D (όταν οι χαρακτήρες μπαλαντερ * και ? χρησιμοποιούνται για ονόματα φακέλων και όχι αρχείων) /R (για επεξεργασία υποφακέλων) /L (όταν η δηλωμένη ομάδα είναι ακολουθία αριθμών με αρχή, βήμα και τέλος, π.χ. 0,2,10 δλδ από το ο μέχρι το 10 ανά 2) ή /F (το βασικό για loop της for)

REM = αυτό δηλώνει ότι, ότι ακολουθεί μετά την rem και μέχρι το τέλος της γραμμής είναι σχόλιο (remark) και να αγνοηθεί. Στο σκριπτάκι μου αγνοείτε την del γιατί έχει μπροστά το REM. Γι αυτό σου είπα ότι αν όλα πάνε καλά σβήσε το rem από την del και βάλε ένα μπροστά από την %zp% ή σβήσε τελείως την γραμμή με την %zp%.

 

Βασικά η for είναι μια πολύ ισχυρή εντολή στα batch αρχεία και θέλει αρκετό δούλεμα για να καταλάβεις πως δουλεύει. Μπορείς να δώσεις σε command prompt την παρακάτω εντολή

for /?

για να δεις όλες τις παραμέτρους της. Δες εδώ για χρήση της for, καθώς και τα related στο τέλος της σελίδας για της παραμέτρους r d l f. Στο site έχει βοήθειες και για τις υπόλοιπες εντολές για batch scripting.

 

 

Το batch είναι το παρακάτω:

@echo off
set zp="C:\Program Files\7-zip\7z.exe"
for /R %%f in (*.rar) do (
cd "%%~pf"
@%zp% x -y *.rar
REM @del /F /Q "%%f"
)

 

 

REM @del /F /Q "%%f"

Δημοσ.

Με την σειρά.

Πρώτα για το rar. Μπορεί να είναι είναι winrar 5 έκδοση και να μην υποστηρίζεται άμεσα από το 7zip... who knows. Με το παραθυρικό 7zip ανοίγει;

 

Μετά για το ότι δεν αποσυμπίεζε το σκριπτάκι σου.

Πρέπει να βάλεις διπλό % (δλδ %%X) στις παραμέτρους της for για το winrar. Στο screenshot το έχεις με ένα % ενώ στο edit το διόρθωσες με δύο. Η διαφορά είναι ότι το ένα % στην for χρησιμοποιείται όταν δίνεις απευθείας την εντολή στο command prompt ενώ όταν την χρησιμοποιείς σε batch scripting πρέπει να βάλεις διπλό %%

Πάντως, θα πρέπει να χρησιμοποιήσεις το unrar.exe αντί για το winrar.exe όταν πρόκειται για σκριπτάκια.

Επίσης, γιατί έβαλες τον διακόπτη -y σε εισαγωγικά; Οι διακόπτες δεν μπαίνουν σε εισαγωγικά. Το -y θεωρεί σε όλες τις ερωτήσεις που μπορεί να εμφανίσει το unrar το yes σαν απάντηση. Ο λόγος που δούλεψε το τελευταίο script είναι ότι διόρθωσες το %%X

 

Για τα /F και /Q

Σόρυ, νόμιζα ότι έψαχνες την q και την f σε παραμέτρους της for. Στο σκριπτάκι μου το /Q σημαίνει ότι η del θα λειτουργεί σε quite mode και δεν θα ρωτάει για τίποτα.να διαγράψει το κάθε αρχείο. Αν δεν το βάλεις θα σε ρωτάει συνέχεια αν είναι ΟΚ. Το /F στην del σημαίνει ότι θα κάνει force delete τα read only αρχεία χωρίς να ρωτήσει.

Μπορείς να τα δεις όλα όπως είπα στο λινκ που σου έδωσα ή αν δώσεις την οποιαδήποτε εντολή με /? στο τέλος, π.χ.

del /?

cd /?

for /?

ren /?

κτλ

 

EDIT

μπορείς να προσθέσεις το o+ στο unrar για να κάνεις overwrite ή το o- για να μην κάνει overwrite, προτείνω το o-

  • Like 1
Δημοσ.

Στην σελίδα με τις εντολές του winrar, το yes to all το εχει σαν "-y".

Επίσης δουλευει αλλα μου τα πετάει χύμα μες τον φάκελο.

 

 

Edit

 

Κάποια rar δεν δουλεύουν με το 7zip

Δημοσ.

Τα 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 τίποτα με αποτέλεσμα να μην ξανά-αποσυμπιέσει τα ίδια αρχεία.

Δημοσ.

Το yes to all argument το έβαλα γιατι μου έβγαζε μήνυμα για overwrite παρόλο που δεν υπήρχε τπτ για να κανει overwrite. Δηλαδή για κάθε part μου έβγαζε το dialogue που ποσταρα ποιο πάνω.

 

Θα το δοκιμάσω αργότερα και θα σου πω.

 

Thanks

Δημοσ.

Σου ζητούσε για overwrite στα multi part archives επειδή αποσυμπίεζε από το κάθε part τα ίδια αρχεία. Το -o- απενεργοποιεί το overwrite και δεν θα σε ξαναρωτήσει.

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

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

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

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

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

Σύνδεση

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

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