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

Για παράδειγμα φανταστείτε την παρακάτω σειρά ενεργειών σε φάκελο του υπολογιστή σας:

  • Αντιγραφή όλων των αρχείων με επέκταση .dat σε κάποιον εξωτερικό δίσκο
  • Διαγραφή όλων των αρχείων με προέκταση .bak
  • Μετονομασία του πρώτου γράμματος των αρχείων που ξεκινούν με το γράμμα “a” σε “p”
  • Αντιγραφή των αρχείων .py που βρίσκονται στο φάκελο c:\programs\python στο φάκελο σας.

Συνένωση όλων των αρχείων .py σε ένα ενιαίο αρχείο με όνομα programs.txt 

Παράδειγμα 1

Η ομαδοποίηση των εντολών μπορούν να γίνουν σε απλά αρχεία κειμένου που έχουν την προέκταση .bat ή .cmd. Τα αρχεία αυτά στη συνέχεια μπορούν να κληθούν είτε δακτυλογραφώντας το όνομά τους σε γραμμή εντολών, είτε κάνοντας διπλό κλικ πάνω τους στην εξερεύνηση των αρχείων και θα εκτελέσουν το σύνολο των εντολών που περιέχουν. Τα αρχεία αυτά ονομάζονται batch files. Ένα παράδειγμα τέτοιου αρχείου βλέπετε στο «παράδειγμα 1».

Δημιουργία batch file

Για τη δημιουργία ενός batch file χρειάζεται ένας απλός editor (π.χ. ο edit των Windows ή το πρόγραμμα Notepad++) στο οποίο δακτυλογραφείτε τις εντολές στην συνέχεια αποθηκεύετε με προέκταση “.bat” ή “.cmd” και είναι έτοιμο.

  Υλοποιήστε τη Δραστηριότητα 2.4.5.1

Γενικά, σε ένα batch file μπορείτε να χρησιμοποιήσετε όλες τις εντολές (Παράρτημα Ι)  που χρησιμοποιούνται και στη γραμμή εντολών. Χρήσιμες εντολές είναι:

Εντολή

Περιγραφή

cd

Μετακίνηση σε φάκελο

choice

Εμφανίζει στην οθόνη ένα μενού επιλογών Υ/Ν για να επιλέξει ο χρήστης.

exist

Ελέγχει αν υπάρχει κάποιο αρχείο

exit

Πραγματοποιεί έξοδο από την κονσόλα όταν τελειώσετε με τις εντολές που εκτελείτε και θέλετε να την κλείσετε.

ipconfig

Εμφανίζει πληροφορίες για τις ρυθμίσεις ip των Windows

md

Δημιουργία φακέλου

pause

Σταματά τη ροή των εντολών περιμένοντας να πατήσετε ένα πλήκτρο για να συνεχίσει.

rd

Διαγραφή φακέλου εφόσον ο φάκελος είναι κενός

rem

Τοποθετεί σχόλια έτσι ώστε να γίνει πιο κατανοητό το αρχείων ενεργειών που δημιουργείτε

set

Όταν εκτελεστεί χωρίς παραμέτρους εμφανίζει τις μεταβλητές συστήματος. Μπορείτε να ορίσετε και δικές σας παραμέτρους

shutdown

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

start

Εκκινεί ένα αρχείο ή ένα πρόγραμμα

systemInfo

Εμφανίζει πληροφορίες για τον υπολογιστή όπου έτρεξε η εντολή

title

Αλλάζει το όνομα του παραθύρου της γραμμής εντολών σε κάποιο της επιλογής σας. Χρήσιμο όταν έχετε πολλαπλά batch files να τρέχουν.

xcopy

Αντιγράφει αρχεία και φακέλους σε διαδρομή που θα του δώσετε

 

Παράμετροι

Κάθε batch file μπορεί να δεχτεί ένα πλήθος παραμέτρων όταν το καλείτε. Οι παράμετροι χωρίζονται πάντα με το «,».  Κάθε παράμετρος αριθμείται με το σύμβολο % και έναν αριθμό από το 0 έως το 9. Η παράμετρος %0 είναι πάντα το όνομα του batch file που καλέσατε.

 

 Πέρασμα παραμέτρων σε batch file

Ένα απλό παράδειγμα είναι αυτό της εικόνας. Το batch file δέχεται μέχρι 2 παραμέτρους (το %0 είναι το όνομα του batch file) και στη συνέχεια εμφανίζει τις παραμέτρους που του δόθηκαν. Αν δοθούν παραπάνω από 2 παραμέτρους τότε αυτή αγνοείται από το αρχείο batch. 

Παράδειγμα 3



 

  Υλοποιήστε τη Δραστηριότητα 2.4.5.2

Η εντολή If

Η εντολή If χρησιμοποιείται για να ελεγχθούν παράμετροι ή μεταβλητές που έχουν οριστεί σε ένα batch file προκειμένου να εκτελεστεί διαφορετικός κώδικας ανά περίπτωση. Έτσι, στο Σφάλμα! Το αρχείο προέλευσης της αναφοράς δεν βρέθηκε. δημιουργήθηκε η ανάγκη να ελεγχθεί η παράμετρος που περάσατε για την περίπτωση που υπάρχει ο συγκεκριμένος φάκελος.  Χρησιμοποιώντας την εντολή if μπορείτε να σταματήσετε την συνέχιση του batch file εφόσον υπάρχει ήδη ο φάκελος mybooks εμφανίζοντας και ένα σχετικό μήνυμα λάθους.


Η εντολή If λειτουργεί ως εξής:

  • Καλεί την εντολή exist η οποία δέχεται παράμετρο το όνομα του φακέλου που δηλώσατε κατά την εκτέλεση του batch file (mybooks).  Η εντολή exist επιστρέφει αληθής αν υπάρχει ο φάκελος ή το αρχείο που έλεγξε
  • Αν η επιστρεφόμενη τιμή είναι αλήθεια (που σημαίνει ότι υπάρχει ήδη ο φάκελος) τότε το batch file εμφανίζει το μήνυμα «Folder already Exist» και προχωρά στην εντολή pause.
  • Αν επιστραφεί η τιμή ψευδής τότε εκτελείται το σύνολο των εντολών που υπάρχουν στην περίπτωση else και μετά εκτελείται το pause.

Προσοχή πρέπει να δοθεί ότι το σύνολο των εντολών σε κάθε μία περίπτωση θα πρέπει να βρίσκονται μέσα σε παρενθέσεις.

 

  Έλεγχος αν περαστεί μία παράμετρος - Τελεστές σύγκρισης

Σε ένα batch file που δέχεται μία ή περισσότερες παραμέτρους καλό είναι να ελέγχετε αν αυτές πέρασαν σωστά σε πλήθος πριν συνεχίσετε σε οποιαδήποτε εκτέλεση εντολών. Για παράδειγμα στο παράδειγμα 5 το batch file περιμένει μία παράμετρο για να συνεχίσει. Αν δεν δοθεί κάποια παράμετρος θα εμφανίσει μήνυμα λάθους.


Για να εμφανίσετε ένα πιο επεξηγηματικό μήνυμα θα πρέπει να γίνει έλεγχος ότι πέρασε μία παράμετρο στο πρόγραμμα:

Παράδειγμα 5

Στη γραμμή 3 του παραπάνω κώδικα ελέγχεται αν η πρώτη παράμετρος είναι κενή χρησιμοποιώντας τον συγκριτικό τελεστή  “ equ ” (συγκρίνει αν η παράμετρος %1 είναι ίση με το κενό).  Σε αυτήν την περίπτωση εμφανίζεται το μήνυμα λάθους «Please give a folder name» και στη συνέχεια εκτελείται η εντολή goto end.

Αν και γενικά η εντολή goto στην προγραμματισμό δεν συνίσταται να χρησιμοποιείται, στο batch file προσφέρει μια δυνατότητα άμεσης μεταφοράς της ροής των εντολών σε άλλο σημείο. Στη συγκεκριμένη περίπτωση στην γραμμή 18 παρατηρείστε το :end . Η γραμμή αυτή που ξεκινά με την άνω κάτω τελεία ονομάζεται ετικέτα και μπορεί να δοθεί σε μια εντολή goto για να εκτρέψει την πορεία εκτέλεσης.

 

Άλλοι συγκριτικοί τελεστές που μπορούν να χρησιμοποιηθούν σε ένα batch file παρουσιάζονται στον παρακάτω πίνακα.

Συγκριτικοί τελεστές

Τελεστής

Περιγραφή

Παράδειγμα

EQU

Ίσο με

x EQU y
Επιστρέφει true Αν το x είναι ίσο με το y

NEQ

Δεν είναι ίσο

x NEQ y
Επιστρέφει True Αν το x δεν είναι ίσο με το y

LSS

Μικρότερο

x LSS y
Επιστρέφει True Αν το x είναι μικρότερο του y

LEQ

Μικρότερο ή ίσο

x LEQ y
Επιστρέφει True Αν το x είναι μικρότερο ή ίσο του y

GTR

Μεγαλύτερο από

x GTR y
Επιστρέφει True Αν το x είναι μεγαλύτερο του y

GEQ

Μεγαλύτερο ή ίσο

x GEQ y
Επιστρέφει True Αν το x είναι μεγαλύτερο ή ίσο του y

 

  Υλοποιήστε τη Δραστηριότητα 2.4.5.3