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

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

Δημοσ.

Καλησπέρα σας. Έχω το εξής πρόβλημα. Έχω έναν φάκελο στον υπολογιστή μου και μέσα έχει κάπου στα 10.000 pdf. Το καθένα pdf έχει όνομα έναν 5 ψηφίο αριθμό. Τι θέλω να κάνω τώρα. Θέλω να δημιουργήσω τόσους φακέλους όσα και τα αρχεία μου και ο κάθε φάκελος να έχει ίδιο όνομα με το pdf που θλέω να τοποθετησω μεσάς . Υπάρχει κάποιος τρόπος να το κάνω μέσα από τα Windows ή έστω μέσο κάποιου προγράμματος, ακόμη και μέσω εντολής της γραμμής εντολών ms Dos συμβιβάζομαι. Στην διάθεση μου έχω διάφορους υπολογιστές με τα εξής λυτουργικα : windows xp, vista, 7, 10 και Mac OS. Οποιαδήποτε βωηθια θα ήταν ευπρόσδεκτη. Ευχαριστώ.

Δημοσ.

Φιλαράκι σε ευχαριστώ πάρα πολύ. Με γλητοσες από πααααραπολες ώρες δουλειάς. Θα το δοκιμάσω αύριο.

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

Εναλλακτικά, μπορείς να το κάνεις και χωρίς να στήσεις κανένα πρόγραμμα.

Πάρε το παρακάτω αρχείο (zip) και αποσυμπίεσε το στον φάκελο που έχεις τα pdf.

Τρέξτο και περίμενε...

 

files2folder.zip

 

Αυτό που κάνει είναι να τρέχει μια εντολή for για όλα τα pdf που θα βρει, να δημιουργεί έναν φάκελο με το ίδιο όνομα και να μεταφέρει στον φάκελο το pdf.

Είναι πολύ απλό και μπορείς να το αλλάξεις (δεξί κλικ->επεξεργασία) για ότι αρχείο θέλεις αλλάζοντας στη 2η γραμμή το pdf.

 

Παρακάτω και το σκριπτ. Επεξηγήσεις στα μηνύματα #7 και #11 παρακάτω.

@echo off

echo MOVE FILES TO FOLDERS WITH THE SAME NAME v3
echo.

set cnt=0
set /p ext="DOSE THN KATALHKSH: "
for %%i in (*.%ext%) do (
md "%%~ni"
set /a cnt+=1
move "%%i" "%%~ni" >:null
)
if %cnt%==0 echo DE BRE8HKAN ARXEIA ME THN KATALHKSH ".%ext%"
@echo DHMIOYRGH8HKAN %cnt% FAKELOI.
pause
EXIT
Επεξ/σία από micos000
  • Like 2
Δημοσ.

 

Εναλλακτικά, μπορείς να το κάνεις και χωρίς να στήσεις κανένα πρόγραμμα.

Πάρε το παρακάτω αρχείο (zip) και αποσυμπίεσε το στον φάκελο που έχεις τα pdf.

Τρέξτο και περίμενε...

 

Αυτό που κάνει είναι να τρέχει μια εντολή for για όλα τα pdf που θα βρει, να δημιουργεί έναν φάκελο με το ίδιο όνομα και να μεταφέρει στον φάκελο το pdf.

Είναι πολύ απλό και μπορείς να το αλλάξεις (δεξί κλικ->επεξεργασία) για ότι αρχείο θέλεις αλλάζοντας στη 2η γραμμή το pdf.

 

attachicon.giffile2folder.zip

 

Παρακάτω και το σκριπτ.

@echo off
set ext=pdf
for %%i in (*.%ext%) do (
@md %%~ni
@move %%i %%~ni >:null
)

 

 

Δημιούργησα ένα φάκελο στην επιφάνεια εργασίας αντέγραψα εκεί 10 pdf από τα έγραφα και έβαλα το script όμως επειδή σε ορισμένα η ονομασία των pdf έχει κενό μου βγάζει παραπάνω φακέλους όπως τα βλέπω ένα για κάθε λέξη περίπου καθώς και μερικά κενά από pdf μέσα φακέλους.

Υποθέτω το πρόβλημα είναι αυτό γιατί αυτά με τη κάτω γραμμή _που ενώνει όλη την ονομασία βγαίνουν σωστά.

Υπάρχει τρόπος να αλλάξει ο κώδικας για να δουλεύει με ολόκληρη την ονομασία σαν ενιαία ανεξάρτητα της διάταξης της ονομασίας;

Και ένα οδηγό για dummies αν έχεις πρόχειρο.

Δημοσ.

Ναι, είναι πολύ απλό και λάθος μου που δεν το πρόβλεψα, απλά ο josi είχε ζητήσει να το κάνει σε αρχεία με όνομα πέντε νούμερα.

Η διόρθωση είναι εύκολη, απλά κάνε δεξί κλικ στο bat->επεξεργασία και βάλε τις μεταβλητές σε "" οπότε τα περνάνε και τα αρχεία με κενό στο όνομα τους.

Δηλαδή, ο νέος κώδικας που θα δουλεύει και σε αρχεία με κενά στο όνομα τους, θα είναι ως εξής:

@echo off
set /p ext="DOSE THN KATALHKSH: "
for %%i in (*.%ext%) do (
md "%%~ni"
move "%%i" "%%~ni" >:null
)

Όταν λες 'οδηγός' τι εννοείς; Θέλεις να αναλύσω τις γραμμές;

Ένα καλό site με αναλυτικές οδηγίες για όλες τις εντολές είναι εδώ και ένα άλλο είναι εδώ.

Επίσης, αν δώσεις στο cmd μια εντολή με παράμετρο /? σου επιστρέφει μια βοήθεια για την εντολή με όλες τις παραμέτρους και κάποια παραδείγματα.

Για παράδειγμα η εντολή

cd /?

θα σου εμφανίσει βοήθεια για την εντολή cd (change directory).

 

Όσο για ο σκριπτάκι...

 

@echo off

Απενεργοποιεί την εμφάνιση κάποιον μηνυμάτων στην κονσόλα

 

set ext=pdf

Ορίζει την μεταβλητή ext ώστε να έχει την παράμετρο pdf. Αυτό το κάνω για να είναι ποιο καθαρό το σκριπτάκι και να ξέρω ποιες παραμέτρους χρησιμοποιώ ώστε να μην τις ψάχνω/αλλάζω μια-μια μέσα στο σκρίπτ. Αυτό είναι μικρό αλλά φαντάσου να είναι 50 γραμμές και να πρέπει να αλλάξω την παράμετρο pdf σε 7 εντολές!

Αυτή η εντολή θα μπορούσε να γίνει και ως εξής:

set /p ext="DOSE THN KATALHKSH: "

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

Βασικά το άλλαξα και στο σκρίπτ ήδη.

 

for %%i in (*.%ext%) do (

Εδώ είναι η 'μαγική' for. Είναι μια πολύ δυνατή εντολή και στο σκριπτάκι διαβάζει όλα τα αρχεία στον τρέχοντα φάκελο (θα μπορούσε να διαβάζει και στους υποφάκελους με την παράμετρο /R), βρίσκει τα αρχεία με την κατάληξη .pdf (η ext Που όρισα στην αρχεί), αποθηκεύει το πρώτο που θα βρει στην μεταβλητή 'i' και περιμένει να της πούμε τι να κάνει. Τα % ορίζουν ότι αυτό που ακολουθεί είναι μεταβλητή και όχι εντολή. Το διπλό %% στο i είναι αναγκαίο όταν η for εκτελείται μέσα σε σκρίπτ, ενώ αν την εκτελέσουμε απευθείας στο cmd βάζουμε ένα %. Τα % μπροστά και πίσω από το ext ορίζουν ότι αυτό που βρίσκεται ανάμεσα τους είναι μεταβλητή.

Η παρένθεση στο τέλος δηλώνει ότι θα ακολουθήσουν αρκετές εντολές και όχι μία. Αν ήταν π.χ. να πας εμφανίσει μόνο το όνομα των αρχείων δεν χρειαζόταν η παρένθεση και θα ακολουθούσε μόνο μια echo "%%i" και τέλος.

 

md "%%~ni"

Η md δημιουργεί έναν φάκελο με το όνομα του αρχείου χωρίς την κατάληξη. Αυτό γίνεται βάζοντας το '~n' μπροστά από την μεταβλητή 'i', το οποίο ανήκει στην for και ορίζει ότι να κοπεί η τελεία και η κατάληξη από την 'i'. Αν το άφηνα απλώς '%%i' ο φάκελος θα είχε όλο το όνομα του αρχείου, μαζί με την κατάληξη.

 

move "%%i" "%%~ni" >:null

Η move μεταφέρει το αρχείο %%i στον φάκελο %%~ni, δηλαδή στον φάκελο που δημιουργήθηκε πριν με το όνομα του αρχείου, χωρίς την κατάληξη. Το '>:NULL' στο τέλος στέλνει όλα τα μηνύματα της move στην συσκευή :NULL που είναι μαι εικονική συσκευή εξόδου που δεν οδηγεί πουθενά. Είναι ένα trick για να μην εμφανίζονται τα μηνύματα εξόδου της εντολής. Αν δεν το έβαζα θα έβλεπες στην κονσόλα συνεχόμενα μηνύματα "Το αρχείο ..... μετακινήθηκε'. και αυτό θα καθυστερούσε την εκτέλεση.

 

)

Η παρένθεση αυτή ορίζει στον Interpreter ότι οι εντολές της for έφτασαν στο τέλος τους και θα πρέπει να επιστρέψει στην αρχική for για το επόμενο αρχείο.

Δημοσ.

 Ευχαριστώ για τις πληροφορίες. Ναι ένα free pdf για να το διαβάζω στο book reader.

Δουλεύει ακόμα και αν αφαιρέσεις το κενό αρχείο κειμένου που δημιουργεί ακόμα και αν προσθέσεις ή αφαιρέσεις pdf λέω να το κρατήσω στο καλάθι των αχρήστων, φαίνεται τυπική η παρουσία του ή για άλλου τύπου έξοδο αποτελεσμάτων πιθανολογώ.

Δημοσ.

Ευχαριστώ για τις πληροφορίες. Ναι ένα free pdf για να το διαβάζω στο book reader.

 Κάτι τέτοιο ή τέτοιο δηλαδή;

 

 

Δουλεύει ακόμα και αν αφαιρέσεις το κενό αρχείο κειμένου που δημιουργεί ακόμα και αν προσθέσεις ή αφαιρέσεις pdf λέω να το κρατήσω στο καλάθι των αχρήστων, φαίνεται τυπική η παρουσία του ή για άλλου τύπου έξοδο αποτελεσμάτων πιθανολογώ.

Σόρυ, αλλά δεν κατάλαβα τίποτα από αυτό.

Δημοσ.

@micos000

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

 

Ένα bug. Θα σου το κάνει με κενό φάκελο πάω στοίχημα!

 

 

Δημοσ.

Όχι, δε δημιουργεί τίποτα τα σκριπτ. Αν δε βρει αρχεία στον φάκελο δεν κάνει τίποτα και απλά κλείνει και αν έκανε κάτι, θα δημιουργούσε έναν φάκελο χωρίς όνομα και όχι έγγραφο. Αν η 'for' δε βρει κάτι που να ταιριάζει με αυτό που της έδωσες μετά την 'in' δεν μπαίνει καν στη loop και τερματίζει. Κάτι λάθος θα έχεις κάνει.

Ξαναέλεγξε το και κάνε copy-paste τις εντολές από το τελευταίο μήνυμα.

 

EDIT:

Πάμε για v3 έκδοση του σκριπτ.

@echo off

echo MOVE FILES TO FOLDERS WITH THE SAME NAME v3
echo.

set cnt=0
set /p ext="DOSE THN KATALHKSH: "
for %%i in (*.%ext%) do (
md "%%~ni"
set /a cnt+=1
move "%%i" "%%~ni" >:null
)
if %cnt%==0 echo DE BRE8HKAN ARXEIA ME THN KATALHKSH ".%ext%"
@echo DHMIOYRGH8HKAN %cnt% FAKELOI.
pause
EXIT

Πλέον βγάζει μήνυμα αν δε βρεθούν αρχεία με την κατάληξη που ορίστηκε, μετράει πόσοι φάκελοι δημιουργήθηκαν (με την μεταβλητή 'cnt' και την εντολή set /a που ορίζει ότι αυτό που ακολουθεί είναι αριθμητική ή λογική έκφραση και να προχωρήσει σε πράξη, το 'cnt+=1' δηλώνει ότι στη μεταβλητή cnt θα προστίθεται 1 κάθε φορά που θα δημιουργείται ένας φάκελος) και εμφανίζει το αποτέλεσμα στο τέλος.

Δημοσ.

Το αποφεύγω για τέτοιες απλές διαδικασίες γιατί δεν είναι ενσωματωμένο στα xp, βασίζεται σε .net και στα 10άρια που είμαι μπορεί κάποια πράγματα να μη δουλεύουν σε 7άρια και xp με ps2.

  • Like 1
Δημοσ.

Σε ευχαριστώ για το χρόνο σου κατάλαβα ότι το δεύτερο έγγραφο το δημιουργεί όταν κάνω δεξί κλικ δημιουργία > έγγραφο κειμένου επικόλληση του bat και μετά το αποθήκευση ως αφήνει και ένα "νέο έγγραφο κειμένου" πάνω στην επιφάνεια εργασίας εκτός του bat.το όποιο όταν το είχα μέσα στο φάκελο γιατί έκανα την αποθήκευση μέσα στο φάκελο απευθείας και όχι στην επιφάνεια εργασίας νόμιζα ότι είχε δημιουργηθεί από την ανυπαρξία έστω και ενός pdf 

My mind bug.

Τέλια.

Τρέχοντας και τη v3.0 όπως τα λες, να είσαι καλά.

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

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

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

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

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

Σύνδεση

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

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