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

Batch file, Send To και πολλαπλά αρχεία.


Eusebius

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

Δημοσ.

Χρησιμοποιώ το unpackmp4 για να ξεπακετάρω αρχεία .avi που έχουν packed bitstream.

Για να επεξεργαστώ όλα τα .avi σ' έναν κατάλογο, το δουλεύω έτσι:

>
for %I in (*.avi) do java -jar unpackmp4.jar -s _un "%I"

Αυτό που δεν ξέρω είναι πώς να φτιάξω ένα batch file και να ρίξω μια συντόμευση στο Send To, ώστε να επιλέγεις όλα τα αρχεία (ή τον κατάλογο) και να τα στέλνεις στο batch file μέσα από το Send To.

 

Για τα αρχεία ένα-ένα, γίνεται μ' αυτό το batch file:

>
java -jar unpackmp4.jar -s _un %1

Για να στέλνω πολλά αρχεία ή έναν ολόκληρο κατάλογο, τί πρέπει να κάνω;

 

edit 2006-08-01 13:55

 

Ok, βρήκα τη λύση για κατάλογο:

>
cd /d %1
for %%I in (*.avi) do java -jar unpackmp4.jar -s _un "%%I"

Ψάχνω ακόμα για πολλαπλά αρχεία.

Δημοσ.

Σώσε το παρακάτω σαν DoSomethingForAllParams.bat και δοκίμασέ το με DoSomethingForAllParams.bat 1 2 3 4 5 6 7 8 9 10 11 12

>@echo off
:start
if "%1" == "" GOTO END
echo parameter: %1
shift
goto start
:end

Δημοσ.

Ευσέβιε θα χρειαστείς επίσης ένα τρόπο να διακρίνεις πότε μια παράμετρος είναι κατάλογος και πότε όχι:

>
@echo off
cd /d %1
if errorlevel 1 goto IsNotADirectory
echo %1 is a directory
goto end
:IsNotADirectory
echo %1 is not a directory
:end

 

Αν χρειαστείς κάτι... σφύρα!

 

Όμως αντί να παιδεύεσαι με δύσκολα batchfiles, μπορείς να κάνεις κάτι άλλο:

Να μην το βάλεις στο SendTo, αλλά στο μητρώο, στο HKCU\avifile\shell\convert\command

Το convert και το command δεν υπάρχουν, τα δημιουργείς.

Πας στο command και αλλάζεις την default τιμή σε "java κτλ %1".

 

Έτσι θα εμφανίζεται ένα [Convert] με δεξί κλικ στον explorer με τον ίδιο τρόπο όπως εμφανίζονται και τα συνηθισμένα [Άνοιγμα] κτλ.

 

Η βασική διαφορά θα είναι ότι όταν διαλέγεις πολλά αρχεία, τα "java κτλ %1" θα εκτελούνται ταυτόχρονα και όχι το ένα μετά το άλλο, οπότε ίσως δεν το θες. Βέβαια έτσι δε χρειάζεσαι for! ;)

 

Αν προτιμήσεις αυτή τη μέθοδο, μπορείς να κάνεις το ίδιο και στο HKCU\Folder\shell\Convert\command για τους καταλόγους, όπου και θα χρειαστείς το batch file που γράφεις παραπάνω.

Δημοσ.

Ευχαριστώ πολύ.

 

Θα τα δοκιμάσω και θα σου πω.

 

Βασικά, δεν το θέλω για τον εαυτό μου και ψάχνω να βρω έναν πολύ εύκολο τρόπο που να μη θέλει κονσόλες και τέτοια.

Δημοσ.
[...'] Όμως αντί να παιδεύεσαι με δύσκολα batchfiles, μπορείς να κάνεις κάτι άλλο: [...]

Αφού παιδεύτηκα μέχρι που μου 'σπασαν τα νεύρα, τελικά το έκανα με το μητρώο και το context menu μόνο για τους καταλόγους.

 

Έφτιαξα ένα κλειδί: HKCR\Directory\shell\unpackmp4, και καλώ από κει το batch file.

 

Ευχαριστώ για τη βοήθεια. :)

 

btw, τώρα που έψαχνα έπεσα για πολλοστή φορά σ' ένα χρήσιμο σάιτ: SS64.com -- Command line reference for Windows, Bash, Oracle, and SQL Server

Δημοσ.

Το δοκίμασα κι εγώ και μου κόλλαγε το if σε κάτι αρχεία με περίεργα ονόματα, οπότε άλλαξα το

if "%1" == "" goto end

σε

if '%1' == '' goto end

δηλαδή με μονά αυτάκια.

 

Νομίζω ότι το

>
@echo off
cd /d %1
if errorlevel 1 goto IsNotADirectory
for %%f in (*.avi) do java -jar unpackmp4.jar -s _un %%f
goto End

:IsNotADirectory
if '%1' == '' goto end
java -jar unpackmp4.jar -s _un %1
shift
goto IsNotADirectory

:End

δουλεύει σωστά για όλες τις περιπτώσεις.

 

edit: βάλ' το όπως είναι στο φάκελο SendTo και μη βάλεις πουθενά διπλά εισαγωγικά του στυλ java -jar unpackmp4.jar -s _un "%1". Όταν χρειάζονται, τα βάζουν μόνα τους τα Windows για όσα προγράμματα βρίσκονται στο φάκελο SendTo.

 

Βοήθεια για τις εντολές του DOS περιέχουν και τα Windows, αν στο έναρξη->εκτέλεση γράψεις

hh mk:@MSITStore:c:\windows\help\ntcmds.chm::/ntcmds.htm

Δημοσ.

Ωωωω! Σούπερ! :-D

 

Μέχρι αύριο να παιδευόμουνα, δεν θα το έβρισκα... Χρειάστηκε μόνο να προσθέσω εισαγωγικά στην 4η αράδα, γιατί δεν μου δουλεύει μ' όλα τα ονόματα:

 

for %%f in (*.avi) do java -jar unpackmp4.jar -s _un "%%f"

 

Χίλια ευχαριστώ! :-D

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...