Εκτελώντας πολλές εντολές μαζί υπό συνθήκες
Ενίοτε συμβαίνει να θέλουμε αν εκτελέσουμε μια εντολή από τη γραμμή εντολών αλλά υπό προϋποθέσεις. Για παράδειγμα, θέλουμε να δημιουργήσουμε ένα φάκελο μόνο εφόσον δεν υπάρχει ήδη. Ή, αντίστροφα,θέλουμε να εκκινήσουμε μια εφαρμογή μόνο εφόσον η προηγούμενη εντολή που δώσαμε απέτυχε. Αυτό μπορούμε να το πετύχουμε χρησιμοποιώντας τους τελεστές “&”, “&&” και “||”.
Παράδειγμα1: Θέλω να εκτελέσω 2 εντολές μαζί, τη μια μετά από την άλλη:
dir C:\ & dir C:\windows
Πρώτα θα εκτελεστεί το “dir C:\” και κατόπιν, ανεξαρτήτως αποτελέσματος, θα εκτελεστεί το “dir C:\windows”.
Παράδειγμα2: Θέλω να εκτελεστεί η 2η εντολή μόνο εφόσον η 1η εκτελεστεί επιτυχώς:
dir C:\NonExistingFolder && dir C:\windows
Στην περίπτωση αυτή δε θα εκτελεστεί τίποτα γιατί ο φάκελος NonExistingFolder δεν υπάρχει.
Παράδειγμα3: Θέλω να εκτελεστεί η 2η εντολή μόνο εφόσον η 1η αποτύχει:
dir C:\NonExistingFolder || dir C:\windows
Στην περίπτωση αυτή, το “dir C:\windows” θα εκτελεστεί κανονικά.
Αν δώσω όμως
dir C:\ExistingFolder || dir C:\windows
τότε το dir C:\windows” δεν θα εκτελεστεί καθόλου.
Αν θέλετε μπορείτε να το κάνετε και πιο σύνθετο βάζοντας πολλούς τελεστές μαζί. π.χ.
dir C:\ && dir C:\ExistingFolder || dir C:\windows
Στην περίπτωση αυτή, το “dir C:\windows” δεν θα εκτελεστεί ποτέ, αφού ο φάκελος ExistingFolder υπάρχει. Το “||” δηλαδή σχετίζεται μόνο με την αμέσως προηγούμενη εντολή.
Αν θέλω το “dir C:\windows” να εκτελεστεί μόνο εφόσον αποτύχει τουλάχιστον μια εκ των δυο προηγούμενων εντολών, μπορώ να βάλω παρενθέσεις:
(dir C:\NonExistingFolder1 & dir C:\NonExistingFolder2) || “dir C:\windows”
Εννοείται ότι τα παραπάνω μπορούμε να τα εφαρμόσουμε και μέσα σε αρχεία batch.
Που μπορεί να φανούν χρήσιμα όλα αυτά; Προσωπικά μου έχει φανεί χρήσιμο σε διάφορες περιπτώσεις. Κυρίως όμως σε 2:
1. Θέλω να εκτελέσω κάποια εντολή σε ένα απομακρυσμένο σύστημα, ανάλογα όμως με το εάν απαντάει στα ping. Οπότε δίνω ping host1 || script.cmd
Το script.cmd θα εκτελεστεί μόνο εφόσον το σύστημα δεν απαντήσει στο ping.
2. Θέλω να εκτελέσω απομακρυσμένα μια εντολή που εάν δεν εκτελεστεί επιτυχώς θα χάσω την απομακρυσμένη σύνδεση. Στην περίπτωση αυτή χρησιμοποιώ το “||” για να ξεκινήσω με το χέρι το σχετικό listener που θα μου επιτρέψει να συνδεθώ εκ νέου και να διαπιστώσω τι πήγε στραβά.
8 Comments
Recommended Comments