Μεταβλητή είσοδος Cmd. Μεταβλητές Περιβάλλοντος

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

Η ομιλία του για τις μεταβλητές συστήματος είναι ότι είναι προεγκατεστημένες στο λειτουργικό σύστημα και μπορούν να χρησιμοποιηθούν από όλες τις εφαρμογές. Για να κάνετε αλλαγές σε αυτά, πρέπει να έχετε δικαιώματα πρόσβασης διαχειριστή. Η πιο συνηθισμένη εφαρμογή είναι η παροχή της εργασίας εκκίνησης του συστήματος. Όταν ένα τέτοιο συμβάν πραγματοποιείται για έναν συγκεκριμένο χρήστη, μπορούμε να μιλήσουμε για τη δυνατότητα χρήσης τοπικών μεταβλητών.

Ακολουθεί μια λίστα με τις υπάρχουσες κατηγορίες μεταβλητών με βάση τη σημασία της προτεραιότητάς τους (με φθίνουσα σειρά):

  • Ενσωματωμένο σύστημα. Πρέπει να ονομάζονται τα πιο σοβαρά, κάτι που απαιτεί ιδιαίτερη προσοχή κατά τη διαδικασία εργασίας.
  • Μεταβλητές προβολής συστήματος που σχετίζονται με το HKEY_LOCAL_MACHINE.
  • Μεταβλητές τοπικής προβολής που σχετίζονται με το HKEY_CURRENT_USER.
  • Μια πλήρης λίστα με μεταβλητές και περιβάλλοντα που βρίσκονται στο έγγραφο Autoexec.bat.
  • Μια πλήρης λίστα με μεταβλητές και περιβάλλοντα που βρίσκονται στο σενάριο εκκίνησης του συστήματος. Σε ορισμένες περιπτώσεις μπορεί να μην υπάρχει.
  • Μεταβλητές που εφαρμόζονται διαδραστικά για γραπτό σενάριο ή έγγραφο δέσμης.

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

Τοπικές μεταβλητές

Ονομα Πληροφορίες

%ALLUSERSPROFILE%

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

Παρέχει την προεπιλεγμένη θέση των προγραμμάτων

Σας επιτρέπει να λάβετε τη διαδρομή προς τον φάκελο που χρησιμοποιείτε

Παρέχει τη γραμμή εντολών που χρησιμοποιείται για την εκτέλεση της τρέχουσας παρουσίας του Cmd.exe

Παρέχει το όνομα του ελεγκτή τομέα που επαληθεύει την ταυτότητα της καθορισμένης περιόδου λειτουργίας

Σας επιτρέπει να παρέχετε παραμέτρους KA για τον τρέχοντα διερμηνέα. Για να αποκτήσετε πρόσβαση, πρέπει να χρησιμοποιήσετε το Cmd.exe

Παρέχει το όνομα του τομέα που έχει μια λίστα λογαριασμών χρηστών

Παρέχει το όνομα του χρήστη που είναι συνδεδεμένος

Επιστρέφει τη θέση του λογαριασμού για τον τρέχοντα χρήστη

Μεταβλητές Συστήματος

Σας επιτρέπει να παρέχετε τον αριθμό έκδοσης των τρεχουσών επεκτάσεων επεξεργαστή εντολών

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

Επιστρέφει τη διαδρομή προς το εκτελέσιμο κέλυφος εντολών

Παρέχει έγκυρες πληροφορίες. Θα πρέπει να σημειωθεί ότι προορίζεται να χρησιμοποιηθεί μια μορφή παρόμοια με την ημερομηνία /t. Όλες οι πληροφορίες σχετικά με την καθορισμένη εντολή μπορούν να ληφθούν απευθείας από την αντίστοιχη ενότητα στον ιστότοπο

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

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

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

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

%NUMBER_OF_PROCESSORS%

Καθορίζει τον αριθμό των επεξεργαστών που διαθέτει μια συγκεκριμένη συσκευή

Μεταδίδει πληροφορίες σχετικά με το όνομα που έχει το λειτουργικό σύστημα σε μια συγκεκριμένη συσκευή. Υπάρχουν ορισμένες δυνατότητες εμφάνισης του ονόματος για ορισμένους τύπους λειτουργικού συστήματος και αυτό πρέπει να ληφθεί υπόψη

Ορίζει τη διαδρομή αναζήτησης για τον εντοπισμό προγραμμάτων

Παρέχει μια λίστα με επεκτάσεις εγγράφων που θεωρούνται από το λειτουργικό σύστημα ως εκτελέσιμες

%PROCESSOR_ARCHITECTURE%

Χρησιμοποιείται σε περιπτώσεις όπου είναι απαραίτητο να αποκτηθεί η αρχιτεκτονική ενός συγκεκριμένου επεξεργαστή

%PROCESSOR_IDENTFIER%

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

%PROCESSOR_LEVEL%

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

Παρέχει οποιονδήποτε ακέραιο στο εύρος 0-32767 συμπεριλαμβανομένου

Παρέχει το όνομα του δίσκου στον οποίο είναι εγγεγραμμένος ο ριζικός κατάλογος των Windows XP

Παρέχει τη θέση του καταλόγου συστήματος OS

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

Παρέχει πληροφορίες για την τρέχουσα ώρα. Χρησιμοποιείται παρόμοια μορφή εμφάνισης με την ώρα /t.

Σας επιτρέπει να επιστρέψετε τον κατάλογο του λειτουργικού συστήματος

Ρύθμιση μεταβλητών περιβάλλοντος

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

Για την έκδοση μιας συγκεκριμένης μεταβλητής, παρέχεται η εγγραφή στο CS:

ορισμός variable_name

Η προσθήκη μιας άλλης μεταβλητής γίνεται γράφοντας:

ορίστε όνομα μεταβλητής=τιμή

Για να εκτελέσετε τη διαδικασία διαγραφής, θα πρέπει να γράψετε τη γραμμή:

ορίστε variable_name=

Το σύστημα καθορίζει τη χρήση των περισσότερων υπαρχόντων συμβόλων για να χρησιμεύουν ως τιμές. Τα προϊόντα μπορούν επίσης να συμπεριληφθούν εδώ. Για να χρησιμοποιήσετε ορισμένους χαρακτήρες, πρέπει πρώτα να εισαγάγετε (^) ή να τους περικλείσετε σε εισαγωγικά. Εάν δεν το κάνετε, ενδέχεται να προκληθεί λανθασμένη εκτέλεση ή σφάλματα. Πρέπει να δούμε μερικά απλά παραδείγματα. Ας υποθέσουμε ότι πρέπει να δημιουργήσουμε μια μεταβλητή new&name. Για να ολοκληρωθεί η εργασία, εισάγονται τα ακόλουθα στο CS:

ορίστε varname=new^&name

Μπορείτε να προσπαθήσετε να μην χρησιμοποιήσετε τον ειδικό χαρακτήρα (^), αλλά θα είναι αδύνατο να το κάνετε. Ο λόγος είναι ότι δίνει συνέχεια το ίδιο σφάλμα.

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

Αντικατάσταση σε μεταβλητές περιβάλλοντος

Υπάρχει ένας τρόπος να γίνει αντικατάσταση ορισμένων τιμών σε μεταβλητές περιβάλλοντος απευθείας από το CS ή το σενάριο. Για την εκτέλεση αυτής της εργασίας, συνιστάται η χρήση συμβόλων ποσοστού. Μοιάζει με αυτό:

%variable_name%

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

Το περιβάλλον φλοιού του Cmd.exe ορίζεται από μεταβλητές που ελέγχουν τη συμπεριφορά του κελύφους και του λειτουργικού συστήματος. Μπορείτε να ορίσετε τη συμπεριφορά του περιβάλλοντος φλοιού ή ολόκληρου του περιβάλλοντος λειτουργικού συστήματος χρησιμοποιώντας δύο τύπους μεταβλητών περιβάλλοντος: σύστημα και τοπικό. Οι μεταβλητές περιβάλλοντος συστήματος καθορίζουν τη συμπεριφορά του παγκόσμιου περιβάλλοντος του λειτουργικού συστήματος. Οι τοπικές μεταβλητές περιβάλλοντος ελέγχουν τη συμπεριφορά του περιβάλλοντος σε μια δεδομένη παρουσία του Cmd.exe.

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

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

Η παρακάτω λίστα παρουσιάζει τους διαφορετικούς τύπους μεταβλητών με φθίνουσα σειρά προτεραιότητας.

  1. Ενσωματωμένες μεταβλητές συστήματος
  2. Μεταβλητές συστήματος Hive HKEY_LOCAL_MACHINE
  3. Τοπικές μεταβλητές Hive HKEY_CURRENT_USER
  4. Όλες οι μεταβλητές περιβάλλοντος και οι διαδρομές καθορίζονται στο αρχείο Autoexec.bat.
  5. Όλες οι μεταβλητές περιβάλλοντος και οι διαδρομές καθορίζονται στο σενάριο σύνδεσης (εάν υπάρχουν).
  6. Μεταβλητές που χρησιμοποιούνται διαδραστικά σε ένα σενάριο ή ένα αρχείο δέσμης

Στο κέλυφος εντολών, κάθε παρουσία του Cmd.exe κληρονομεί το περιβάλλον της γονικής του εφαρμογής. Επομένως, μπορείτε να αλλάξετε μεταβλητές στο νέο περιβάλλον Cmd.exe χωρίς να επηρεάσετε το περιβάλλον γονικής εφαρμογής.

Ο παρακάτω πίνακας παρέχει μια λίστα με μεταβλητές συστήματος και τοπικού περιβάλλοντος για τα Windows XP.

Μεταβλητός

Περιγραφή

%ALLUSERSPROFILE%

Τοπικός

Επιστρέφει την τοποθέτηση του προφίλ "Όλοι οι χρήστες".

Τοπικός

Επιστρέφει την προεπιλεγμένη θέση για τα δεδομένα της εφαρμογής.

Τοπικός

Επιστρέφει τη διαδρομή στον τρέχοντα φάκελο.

Τοπικός

Επιστρέφει τη συμβολοσειρά εντολών που χρησιμοποιήθηκε για την εκκίνηση αυτής της παρουσίας του Cmd.exe.

Σύστημα

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

Σύστημα

Επιστρέφει το όνομα του υπολογιστή.

Σύστημα

Επιστρέφει τη διαδρομή προς το κέλυφος εντολών που εκτελείται.

Σύστημα

Επιστρέφει τα τρέχοντα δεδομένα. Χρησιμοποιεί την ίδια μορφή με την εντολή ημερομηνία/τ. Δημιουργήθηκε με την εντολή Cmd.exe.

Σύστημα

Επιστρέφει τον κωδικό σφάλματος της τελευταίας εντολής που χρησιμοποιήθηκε. Μια τιμή διαφορετική από το μηδέν συνήθως υποδηλώνει σφάλμα.

Σύστημα

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

Σύστημα

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

Σύστημα

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

Τοπικός

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

%NUMBER_OF_PROCESSORS%

Σύστημα

Καθορίζει τον αριθμό των επεξεργαστών που είναι εγκατεστημένοι στον υπολογιστή.

Σύστημα

Επιστρέφει το όνομα του λειτουργικού συστήματος. Όταν χρησιμοποιείτε Windows 2000, το όνομα του λειτουργικού συστήματος εμφανίζεται ως Windows_NT.

Σύστημα

Καθορίζει τη διαδρομή αναζήτησης για εκτελέσιμα αρχεία.

Σύστημα

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

%PROCESSOR_ARCHITECTURE%

Σύστημα

Επιστρέφει την αρχιτεκτονική του επεξεργαστή. Τιμές: x86, IA64.

%PROCESSOR_IDENTFIER%

Σύστημα

Επιστρέφει μια περιγραφή του επεξεργαστή.

%PROCESSOR_LEVEL%

Σύστημα

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

%PROCESSOR_REVISION%

Σύστημα

Επιστρέφει τον αριθμό αναθεώρησης του επεξεργαστή.

Τοπικός

Επιστρέφει επιλογές γραμμής εντολών για τον τρέχοντα διερμηνέα. Δημιουργήθηκε με την εντολή Cmd.exe.

Σύστημα

Επιστρέφει έναν αυθαίρετο δεκαδικό αριθμό από το 0 έως το 32767. Δημιουργήθηκε από την εντολή Cmd.exe.

Σύστημα

Επιστρέφει το όνομα της μονάδας δίσκου που περιέχει τον ριζικό κατάλογο των Windows XP (δηλαδή τον κατάλογο συστήματος).

Σύστημα

Επιστρέφει τη θέση του καταλόγου συστήματος των Windows XP.

Σύστημα και χρήστης

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

Σύστημα

Επιστρέφει την τρέχουσα ώρα. Χρησιμοποιεί την ίδια μορφή με την εντολή χρόνος/τ. Δημιουργήθηκε με την εντολή Cmd.exe.

Τοπικός

Επιστρέφει το όνομα του τομέα που περιέχει τη λίστα των λογαριασμών χρηστών.

Τοπικός

Επιστρέφει το όνομα χρήστη του τρέχοντος συνδεδεμένου χρήστη.

Τοπικός

Επιστρέφει την τοποθέτηση προφίλ για τον τρέχοντα χρήστη.

Σύστημα

Επιστρέφει τη θέση του καταλόγου του λειτουργικού συστήματος.

(εντολές), σας επιτρέπουν να το κάνετε χωρίς να προσδιορίζετε απόλυτες διαδρομές προς καταλόγους. Για παράδειγμα, εάν δεν γνωρίζουμε εκ των προτέρων το γράμμα της μονάδας δίσκου συστήματος, μπορούμε πάντα να χρησιμοποιήσουμε τη μεταβλητή %systemdrive%, το οποίο επιστρέφει το γράμμα μονάδας δίσκου στο οποίο είναι εγκατεστημένο το λειτουργικό σύστημα. Επίσης, οι μεταβλητές χρησιμοποιούνται για τη βελτιστοποίηση του κώδικα - μια παράμετρος που επαναλαμβάνεται επανειλημμένα (για παράδειγμα, ένα κλειδί μητρώου) μπορεί να αντιστοιχιστεί σε μια σύντομη μεταβλητή και να χρησιμοποιηθεί. Αυτό το άρθρο εξετάζει λεπτομερώς διάφορες τεχνικές για την εργασία με μεταβλητές, καθώς και τρόπους αλλαγής και δημιουργίας νέων μεταβλητών. Τώρα ας μιλήσουμε για όλα με τη σειρά.

Ταξινόμηση μεταβλητών περιβάλλοντος
Η Βοήθεια των Windows κάνει διάκριση μεταξύ δύο τύπων μεταβλητών περιβάλλοντος: συστήματος και τοπικής. Οι μεταβλητές συστήματος επιστρέφουν τις ίδιες τιμές για όλους τους χρήστες. Π.χ, %systemdrive%- το γράμμα της μονάδας δίσκου συστήματος και είναι το ίδιο για όλους τους χρήστες. Αλλά οι τιμές που επιστρέφονται από τις τοπικές μεταβλητές ποικίλλουν ανάλογα με τον συνδεδεμένο χρήστη. Για παράδειγμα, %προφίλ χρήστη%μπορεί να επιστρέψει C:\Documents and Settings\CurrentUser, όπου CurrentUser είναι το όνομα λογαριασμού χρήστη.

Η εντολή θα σας βοηθήσει να μάθετε ποιες μεταβλητές περιβάλλοντος στο λειτουργικό σύστημα είναι διαθέσιμες σε εσάς και ποιες τιμές τους έχουν εκχωρηθεί αυτήν τη στιγμή ΣΕΙΡΑ, που ξεκίνησε από τη γραμμή εντολών χωρίς παραμέτρους ( Έναρξη – Εκτέλεση – cmd – set). Σε αυτό το άρθρο, μας ενδιαφέρουν οι μεταβλητές που υποδεικνύουν τη διαδρομή προς διάφορους φακέλους (καταλόγους). Λίγα περισσότερα για μερικά από αυτά παρακάτω:

Μεταβλητή|Τύπος|Περιγραφή
%SYSTEMDRIVE%|System|Επιστρέφει το όνομα της μονάδας δίσκου που περιέχει τον ριζικό κατάλογο του λειτουργικού συστήματος Windows XP/2003 (δηλαδή τον ριζικό κατάλογο του συστήματος).
%SYSTEMROOT%, %WINDIR%|System|Επιστρέφει τη θέση του ριζικού καταλόγου του λειτουργικού συστήματος Windows /2003
%PATH%|System|Καθορίζει τη διαδρομή αναζήτησης για εκτελέσιμα αρχεία.
%PROGRAMFILES%|System|Δηλώνει τη διαδρομή προς τον κατάλογο εγκατάστασης του προγράμματος (Program Files)
%COMMONPROGRAMFILES%|System|Δηλώνει τη διαδρομή προς τον κοινό κατάλογο του προγράμματος (Program Files\Common Files).
%TEMP% και %TMP%|Σύστημα και χρήστης|Επιστρέφει τους προεπιλεγμένους προσωρινούς φακέλους που χρησιμοποιούνται από εφαρμογές που είναι προσβάσιμες σε συνδεδεμένους χρήστες. Ορισμένες εφαρμογές απαιτούν τη μεταβλητή TEMP, άλλες απαιτούν τη μεταβλητή TMP.
%USERPROFILE%|Τοπικό|Επιστρέφει τη θέση του προφίλ για τον τρέχοντα χρήστη.
%ALLUSERSPROFILE%|Τοπικό|Επιστρέφει τη θέση του προφίλ "Όλοι οι χρήστες".
%CD%|Τοπικό|Επιστρέφει τη διαδρομή στον τρέχοντα φάκελο.
%APPDATA%|Τοπική|Επιστρέφει την προεπιλεγμένη θέση των δεδομένων της εφαρμογής.

Χρήση μεταβλητών σε αρχεία δέσμης
Ας ξεκινήσουμε με ένα απλό παράδειγμα:

CMD/BATCH:

DEL /F /Q "%AllUsersProfile%\Main Menu\Windows Activation.lnk" DEL /F /Q "%AllUsersProfile%\Main Menu\WindowsUpdate.lnk" DEL /F /Q "%systemroot%\system32\*.scr "

Σε αυτό το παράδειγμα, αφαιρώ τις παραπάνω συντομεύσεις που εμφανίζονται στο μενού Έναρξη χρησιμοποιώντας τη μεταβλητή %AllUsersProfile%, καθώς και όλα τα αρχεία με την επέκταση SCR από τον κατάλογο Windows\system32, χρησιμοποιώντας τη μεταβλητή %SystemRoot%. Αντί για DEL /F /Q, όπως καταλαβαίνετε, μπορεί να υπάρχει οτιδήποτε: από την εντολή αντιγραφής COPY έως την εντολή εκκίνησης της εγκατάστασης της εφαρμογής που χρειαζόμαστε με όλες τις παραμέτρους της γραμμής εντολών, εάν απαιτείται.

Σε όλες τις εντολές, χρησιμοποίησα συγκεκριμένα "εισαγωγικά" - αυτό δεν είναι τυχαίο. Ολόκληρη η διαδρομή, συμπεριλαμβανομένων των μεταβλητών, πρέπει να περικλείεται σε εισαγωγικά εάν χρησιμοποιείτε διαδρομές που περιέχουν κενά. Ακόμα κι αν η ίδια η μεταβλητή δεν περιέχει εισαγωγικά, αφού αναλυθεί από το σύστημα, ενδέχεται να εμφανιστούν κενά στη διαδρομή (για παράδειγμα, %Αρχεια προγραμματος%στο C:\Program Files). Σε κάθε περίπτωση, είναι καλύτερο να χρησιμοποιείτε εισαγωγικά - αυτή είναι καλή πρακτική όταν σχεδιάζετε αρχεία εντολών.

Πώς να ορίσετε τις μεταβλητές σας

Το παραπάνω παράδειγμα χρησιμοποίησε ήδη υπάρχουσες μεταβλητές περιβάλλοντος. Και πιθανότατα προσέξατε τα ποσοστά σύμβολα που περιβάλλουν τα ονόματα των μεταβλητών. Αυτοί οι χαρακτήρες χρειάζονται για να επιτρέπεται η αντικατάσταση μεταβλητών στη γραμμή εντολών ή σε ένα αρχείο δέσμης. Τα σύμβολα ποσοστού υποδεικνύουν ότι το Cmd.exe πρέπει να έχει πρόσβαση στις τιμές των μεταβλητών αντί να κάνει σύγκριση χαρακτήρα προς χαρακτήρα. Παρακάτω θα δείτε πώς λειτουργεί. Μπορείτε να ορίσετε τις μεταβλητές σας σε ένα αρχείο δέσμης με την εντολή SET.

Εντολή SET
Μπορείτε να ορίσετε τις μεταβλητές σας στο αρχείο δέσμης χρησιμοποιώντας την ίδια εντολή SET.

Για να προσθέσετε μια μεταβλητή, πληκτρολογήστε στη γραμμή εντολών:

Κώδικας:

Ορισμός variable_name=value

Για να εμφανίσετε μια μεταβλητή, πληκτρολογήστε στη γραμμή εντολών:

Κώδικας:

Ορισμός variable_name

Για να αφαιρέσετε μια μεταβλητή, πληκτρολογήστε στη γραμμή εντολών:

Κώδικας:

Ορισμός variable_name=

Για παράδειγμα,

Κώδικας:

SET mydir=D:\Files\Work

ορίζει μια μεταβλητή mydir, το οποίο θα επιστρέψει τη διαδρομή στον καθορισμένο φάκελο. Μπορείτε να διαβάσετε περισσότερα για την ομάδα από σετ /?.

Σημαντική σημείωση:Οι μεταβλητές που ορίζονται από την εντολή set ισχύουν μόνο για τη διάρκεια της περιόδου λειτουργίας εντολών (δείτε παρακάτω) στην οποία ορίστηκαν.

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

Παράδειγμα εκχώρησης μεταβλητών σε ένα αρχείο RunOnceEx.cmdεισαγωγή ρυθμίσεων στο μητρώο

CMD/BATCH:

@echo off SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx SET i=100 REG ADD %KEY% /V TITLE /D "Εγκατάσταση εφαρμογών" /f REG ADD %KEY%\%i% /VE /D "WinRar 3.51" /f REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f REG ADD %KEY%\%i% /V 2 / D "REGEDIT /S %systemdrive%\install\Software\rar_set.reg /s" /f SET /A i+=1

Σε αυτό το σενάριο, η εντολή SET ορίζει δύο μεταβλητές - %Εγώ%Και %ΚΛΕΙΔΙ%. Λάβετε υπόψη ότι καθορίζονται χωρίς σύμβολα τοις εκατό, αλλά για να αποκτήσετε πρόσβαση σε αυτά, απαιτείται ήδη %%. Μεταβλητός %ΚΛΕΙΔΙ%χρησιμεύει για την απλοποίηση και τη βελτιστοποίηση του κώδικα. Παραμένει αμετάβλητο καθ' όλη τη διάρκεια της τρέχουσας περιόδου λειτουργίας εντολών, εξαλείφοντας την ανάγκη να συμπεριλαμβάνεται ένα κλειδί μητρώου στον κώδικα κάθε φορά. Κάθε φορά που εμφανίζεται στον κώδικα %ΚΛΕΙΔΙ%, θα αντικατασταθεί από το HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx. Και εδώ %Εγώ%χρησιμεύει για διαδοχική αρίθμηση τμημάτων μητρώου. Με αρχική τιμή 100, η ​​μεταβλητή αυξάνεται κατά ένα χρησιμοποιώντας την εντολή SET /A i+=1 μετά από κάθε μπλοκ εντολών, με αποτέλεσμα την ακολουθία 100, 101, 102 κ.λπ. Η γραμμή λοιπόν

Κώδικας:

REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f

στην πραγματικότητα θα λειτουργήσει έτσι

Κώδικας:

REG ΠΡΟΣΘΗΚΗ HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\100 /V 1 /D "C:\install\Software\WinRar.exe /s" /f

Σημειώστε ότι το απόσπασμα αρχείου χρησιμοποιεί επίσης μια μεταβλητή συστήματος %systemdrive%, που αντιστοιχεί στο γράμμα της μονάδας δίσκου συστήματος.

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

Κώδικας:

Για %%i σε (C D E F G H I J K L M N O P Q R S T U V W X Y Z) κάντε εάν υπάρχει %%i:\WIN51 ορίστε CDROM=%%i: start /wait “%CDROM%\INSTALL\DVDTools\NBRom\Nero.exe”

Σε αυτό το παράδειγμα, όλες οι μονάδες που αναφέρονται στη λίστα αναζητούνται για ένα συγκεκριμένο αρχείο (WIN51). Εάν εντοπιστεί σε έναν από τους δίσκους, στον τελευταίο εκχωρείται μια μεταβλητή %ΜΟΝΑΔΑ ΟΠΤΙΚΟΥ ΔΙΣΚΟΥ%, και στη συνέχεια το λογισμικό εγκαθίσταται χρησιμοποιώντας τη διαδρομή που καθορίζεται από τη μεταβλητή που δημιουργήθηκε.

Αλλαγή μεταβλητών περιβάλλοντος και προσθήκη των δικών σας μεταβλητών

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

βοηθητικό πρόγραμμα setenv
Το βοηθητικό πρόγραμμα λειτουργεί από τη γραμμή εντολών (ιστότοπος, λήψη). Το βοηθητικό πρόγραμμα είναι πολύ εύκολο στη χρήση (setenv /?).


Ρυθμίσεις χρήστη|setenv -u τιμή μεταβλητής_όνομα
Ρυθμίσεις συστήματος|setenv -m τιμή μεταβλητής_όνομα
Ρυθμίσεις Προεπιλεγμένος χρήστης|setenv -d τιμή variable_name
Τρέχουσες ρυθμίσεις συνεδρίας χρήστη|τιμή μεταβλητής_όνομα_setenv -v

Ας υποθέσουμε ότι εάν πρέπει να λάβετε τη μεταβλητή %temp% στο στάδιο της εγκατάστασης, μπορείτε να το κάνετε αυτό από το cmdlines.txt, για παράδειγμα:

Κώδικας:

:: Δημιουργία και ρύθμιση φακέλου Temp... md %systemdrive%\Temp setenv -u Temp %systemdrive%\Temp setenv -u Tmp %systemdrive%\Temp

Το βοηθητικό πρόγραμμα είναι βολικό γιατί μετά τη ρύθμιση μιας μεταβλητής, μπορεί να χρησιμοποιηθεί αμέσως. Λοιπόν, σχεδόν αμέσως - στην επόμενη συνεδρία της ομάδας. Για να το χρησιμοποιήσετε στην τρέχουσα περίοδο λειτουργίας, μπορείτε να χρησιμοποιήσετε την παλιά οικεία εντολή set:

Κώδικας:

:: Δημιουργία #EgOrus# var set EgOrus=D:\EgOrus setenv -u EgOrus %EgOrus%

Εισαγωγή ρυθμίσεων στο μητρώο
Εάν προχωρήσετε κάνοντας αλλαγές στο μητρώο μετά την πρώτη σύνδεση, τότε οι μεταβλητές θα αρχίσουν να "λειτουργούν" μόνο μετά την επανεκκίνηση ή το τέλος της περιόδου λειτουργίας χρήστη. Φυσικά, κατά τη διαδικασία αυτόματης εγκατάστασης μπορείτε να εισαγάγετε τις επιθυμητές παραμέτρους στο T-12 (δείτε το άρθρο Registry Tweaks) και να παρακάμψετε αυτό το πρόβλημα. Εάν δεν σκοπεύετε να χρησιμοποιήσετε την εκχωρημένη μεταβλητή στην τρέχουσα περίοδο λειτουργίας χρήστη, τότε η εισαγωγή στο μητρώο μπορεί επίσης να σας ταιριάζει. Δεν θα περιγράψω ξανά τη διαδικασία εισαγωγής αρχείων REG, αλλά θα εξετάσω την εντολή REG ADD χρησιμοποιώντας ένα συγκεκριμένο παράδειγμα.

Ας υποθέσουμε ότι σας ενδιαφέρει να έχετε μια μεταβλητή στο σύστημα %ΜΟΝΑΔΑ ΟΠΤΙΚΟΥ ΔΙΣΚΟΥ%μόνιμα και εγκαταστήστε το κατά την εγκατάσταση εφαρμογών από το CD. Ακολουθώντας τον παραπάνω κώδικα, αφού ορίσετε μια μεταβλητή, πρέπει να την αντιστοιχίσετε στη μεταβλητή συστήματος.

CMD/BATCH:

Για %%i σε (C D E F G H I J K L M N O P Q R S T U V W X Y Z) κάντε εάν υπάρχει %%i:\WIN51 ορίστε CDROM=%%i: REG ΠΡΟΣΘΗΚΗ "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\vCDROdromment" φά

Μόλις βρεθεί ένα αρχείο WIN51, η μονάδα δίσκου στην οποία βρέθηκε εκχωρείται μια τοπική μεταβλητή %ΜΟΝΑΔΑ ΟΠΤΙΚΟΥ ΔΙΣΚΟΥ%, η οποία εκχωρείται αμέσως ως σταθερή μεταβλητή συστήματος μέσω εισαγωγής στο μητρώο. Αυτή η μέθοδος προτάθηκε σε ένα από τα θέματα στο συνέδριο Oszone Sanja Alone. Την ίδια στιγμή το έμαθες. όπου οι ρυθμίσεις της μεταβλητής συστήματος είναι αποθηκευμένες στο μητρώο. Οι ρυθμίσεις μεταβλητής χρήστη αποθηκεύονται στο HKCU\Environment. Οι διαδρομές που επιστρέφονται από τις μεταβλητές %PROGRAMFILES% και %COMMONPROGRAMFILES% μπορούν να προβληθούν στις παραμέτρους ProgramFilesDir και CommonFilesDir στο HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion, αλλά δεν πρέπει να αλλάξουν εκεί. Οι κατάλογοι εγκατάστασης προγραμμάτων (εκτός από το %SystemDrive%\Program Files) πρέπει να ρυθμιστούν μέσω ενός αρχείου απαντήσεων.

Περίληψη
Το κέλυφος εντολών των Windows (cmd.exe) είναι ένα πολύ ισχυρό εργαλείο για την εργασία με το σύστημα. Τα ομαδικά αρχεία μπορούν να αυτοματοποιήσουν αρκετό αριθμό εργασιών, γι' αυτό και χρησιμοποιούνται συχνά για την αυτόματη εγκατάσταση των Windows. Η επιδέξια χρήση μεταβλητών σε αρχεία δέσμης σάς επιτρέπει να επιλύσετε ένα ευρύ φάσμα ζητημάτων. Η εργασία με το κέλυφος εντολών γίνεται πιο αποτελεσματική και ταυτόχρονα ο κώδικας για τα αρχεία δέσμης απλοποιείται. Μπορείτε να βρείτε άλλα παραδείγματα χρήσης μεταβλητών στις σελίδες του ιστότοπου ή του φόρουμ. Όλα τα παραδείγματα που χρησιμοποιήθηκαν σε αυτό το άρθρο ελήφθησαν από τα σενάρια των συμμετεχόντων στο φόρουμ του OsZone.ru, για τα οποία τους ευχαριστούμε πολύ.

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

cmd.exe- έναν διερμηνέα εντολών που χρησιμοποιεί το κέλυφος εντολών του λειτουργικού συστήματος των Windows για να μεταφράσει την εισαγόμενη εντολή σε μορφή κατανοητή από το σύστημα.

Συνεδρία ομάδαςμπορεί να ξεκινήσει είτε με εκκίνηση cmd.exe, και εκτελώντας ένα αρχείο δέσμης. Με άλλα λόγια, δημιουργείται το τρέχον κέλυφος εντολών. Κατά συνέπεια, η έξοδος από αυτό το κέλυφος (για παράδειγμα, η ολοκλήρωση ενός αρχείου δέσμης) τερματίζει τη συνεδρία εντολών.

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

Μερικές φορές είναι απαραίτητο να σχηματιστεί μεταβλητή ημερομηνίας ώρας V cmd/batσενάρια παράθυραόπως το χρειαζόμαστε και όχι όπως μας το δίνει το λειτουργικό σύστημα.

Για παράδειγμα, για να προσθέσετε αυτά τα δεδομένα σε ένα αρχείο καταγραφής, για να καταγράψετε την ώρα ή την ημερομηνία ενός συμβάντος, δημιουργήστε ένα αρχείο με ένα όνομα που θα πρέπει να περιέχει δεδομένα ημερομηνίας ή ώρας (ημέρα, μήνας, έτος, ώρα, λεπτά, δευτερόλεπτα, χιλιοστά του δευτερολέπτου. ) Ποτέ δεν ξέρεις, ποια είναι τα καθήκοντά μας... Ας χρησιμοποιήσουμε τη φαντασία μας :)

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

h- ώρα 2 ψηφία (δηλαδή, η ώρα θα δοθεί με την ακόλουθη μορφή - 01, 02, ..., 09, ... , 12, ... 24)

m - λεπτά 2 χαρακτήρες

s - δευτερόλεπτα 2 σημάδια

ms - χιλιοστά του δευτερολέπτου 2 ψηφία, για κάποιο λόγο από 0 έως 99

ηη - σημάδια ημέρας 2

mm - μήνας 2 χαρακτήρες

εεεε - έτος 4 ψηφία

Παράδειγμα χρήσης μεταβλητών %ΗΜΕΡΟΜΗΝΙΑ%Και %ΧΡΟΝΟΣ%σε σενάρια cmd / νυχτερίδα Windows:

@echo off
ορισμός h=%TIME:~0,2%
ορισμός m=%TIME:~3,2%
ορισμός s=%TIME:~6,2%
ορισμός ms=%TIME:~9,2%
ορίστε curtime=%h%:%m%:%s%:%ms%
ορίστηκε dd=%DATE:~0,2%
ορισμός mm=%DATE:~3,2%
ορισμός εεεε=%DATE:~6,4%
ορίστε curdate=%dd%-%mm%-%yyyy%
ορίστε curdatetime=%curdate% %curtime%

echo Η τρέχουσα ώρα είναι %curdatetime%

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

Θεωρητικά, μπορείτε να πάρετε μέρη οποιασδήποτε μεταβλητής με παρόμοιο τρόπο, το θέμα είναι ότι η μορφή εδώ είναι η εξής:

Το πρώτο ψηφίο μετά: ~ είναι ο αριθμός του χαρακτήρα από τον οποίο αρχίζουμε να παίρνουμε την τιμή, το δεύτερο ψηφίο είναι πόσοι χαρακτήρες πρέπει να καταγραφούν.

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

Γνωρίζω τις ακόλουθες μεταβλητές των οποίων τις τιμές μπορούμε να πάρουμε:

Ονομα
Περιγραφή
ALLUSERSPROFILE Επιστρέφει την τοποθέτηση του προφίλ "Όλοι οι χρήστες".
ΔΕΔΟΜΕΝΑ ΕΦΑΡΜΟΓΗΣ Επιστρέφει την προεπιλεγμένη θέση για τα δεδομένα της εφαρμογής.
CD Καθορίζει τη διαδρομή του τρέχοντος φακέλου. Πανομοιότυπο με την εντολή CD χωρίς ορίσματα.
CMDCMDLINE Η ακριβής εντολή που χρησιμοποιείται για την εκκίνηση του τρέχοντος cmd.exe.
CMDEXTVERSION έκδοση των τρεχουσών επεκτάσεων επεξεργαστή εντολών.
CommonProgramFiles Θέση του καταλόγου "Common Files" (συνήθως %ProgramFiles%\Common Files)
ΟΝΟΜΑ ΥΠΟΛΟΓΙΣΤΗ όνομα υπολογιστή
COMSPEC εκτελέσιμο διαδρομή προς το κέλυφος
ΗΜΕΡΟΜΗΝΙΑ Επιστρέφει την τρέχουσα ημερομηνία. Χρησιμοποιεί την ίδια μορφή με την εντολή date /t. Δημιουργήθηκε με την εντολή Cmd.exe.
ΕΠΙΠΕΔΟ ΣΦΑΛΜΑΤΟΣ Επιστρέφει τον κωδικό σφάλματος της τελευταίας εντολής που χρησιμοποιήθηκε. Μια μη μηδενική τιμή συνήθως υποδηλώνει σφάλμα.
HOMEDRIVE Επιστρέφει το όνομα της μονάδας τοπικού σταθμού εργασίας που σχετίζεται με τον οικιακό κατάλογο του χρήστη. Ορισμός με βάση τη θέση του κύριου καταλόγου. Ο αρχικός κατάλογος του χρήστη καθορίζεται στο συμπληρωματικό πρόγραμμα Τοπικοί χρήστες και ομάδες.
HOMEPATH Επιστρέφει την πλήρη διαδρομή στον αρχικό κατάλογο του χρήστη. Ορισμός με βάση τη θέση του κύριου καταλόγου. Ο αρχικός κατάλογος του χρήστη καθορίζεται στο συμπληρωματικό πρόγραμμα Τοπικοί χρήστες και ομάδες.
ΜΕΤΟΧΗ ΚΑΤΟΙΚΙΟΥ Επιστρέφει τη διαδρομή δικτύου στον κοινόχρηστο οικιακό κατάλογο του χρήστη. Ορισμός με βάση τη θέση του κύριου καταλόγου. Ο αρχικός κατάλογος του χρήστη καθορίζεται στο συμπληρωματικό πρόγραμμα Τοπικοί χρήστες και ομάδες.
LOGONSERVER το όνομα του ελεγκτή τομέα που χρησιμοποιείται για την εξουσιοδότηση του τρέχοντος χρήστη
NUMBER_OF_PROCESSORS τον αριθμό των επεξεργαστών στο σύστημα
OS όνομα λειτουργικού συστήματος. Τα Windows XP και τα Windows 2000 εμφανίζονται ως Windows_NT.
ΜΟΝΟΠΑΤΙ Καθορίζει τη διαδρομή αναζήτησης για εκτελέσιμα αρχεία.
PATHEXT Επιστρέφει μια λίστα με επεκτάσεις αρχείων που θεωρούνται εκτελέσιμες από το λειτουργικό σύστημα.
ΕΠΕΞΕΡΓΑΣΤΗΣ_ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ αρχιτεκτονική επεξεργαστή
PROCESSOR_IDENTIFIER περιγραφή επεξεργαστή
PROCESSOR_LEVEL αριθμός μοντέλου επεξεργαστή
PROCESSOR_REVISION αναθεώρηση επεξεργαστή
ΑΡΧΕΙΑ ΠΡΟΓΡΑΜΜΑΤΟΣ διαδρομή προς το φάκελο Program Files
ΠΡΟΤΡΟΠΗ Επιστρέφει επιλογές γραμμής εντολών για τον τρέχοντα διερμηνέα. Δημιουργήθηκε με την εντολή Cmd.exe.
ΤΥΧΑΙΟΣ τυχαίος δεκαδικός αριθμός από το 0 έως το 32767. Δημιουργήθηκε από το Cmd.exe
SESSIONNAME Τύπος συνεδρίας. Η προεπιλεγμένη τιμή είναι "Κονσόλα"
SYSTEMDRIVE ο δίσκος στον οποίο βρίσκεται ο ριζικός φάκελος των Windows
SYSTEMROOT Διαδρομή ριζικού φακέλου των Windows
TEMP ή TMP Επιστρέφει τους προεπιλεγμένους προσωρινούς φακέλους που χρησιμοποιούνται από εφαρμογές που είναι προσβάσιμες σε συνδεδεμένους χρήστες. Ορισμένες εφαρμογές απαιτούν τη μεταβλητή TEMP, άλλες απαιτούν τη μεταβλητή TMP. Δυνητικά TEMP και TMP θα μπορούσαν να δείχνουν διαφορετικούς καταλόγους, αλλά συνήθως είναι οι ίδιοι.
ΧΡΟΝΟΣ Επιστρέφει την τρέχουσα ώρα. Χρησιμοποιεί την ίδια μορφή με την εντολή time /t. Δημιουργήθηκε με την εντολή Cmd.exe.
USERDOMAIN το όνομα του τομέα στον οποίο ανήκει ο τρέχων χρήστης
ΟΝΟΜΑ ΧΡΗΣΤΗ τρέχον όνομα χρήστη
ΠΡΟΦΙΛ ΧΡΗΣΤΗ διαδρομή προς το προφίλ του τρέχοντος χρήστη
WINDIR τον κατάλογο όπου είναι εγκατεστημένα τα Windows

Σε αυτό το άρθρο:

  • Ορισμός μεταβλητών
  • Μεταβλητές γραμμής εντολών (παράμετροι κλήσης αρχείου bat)
  • IF υπό όρους χειριστή
  • Λειτουργίες
  • Χρήση τιμών επιστροφής (επεξεργασία κωδικού εξόδου)

Ορισμός μεταβλητών

ΣΕΙΡΑ<Имяпеременной>=<Значениепеременной>

Η δήλωση SET είναι μια επέκταση της ικανότητας του λειτουργικού συστήματος να χειρίζεται παραμέτρους. Καθορίζει μια μεταβλητή της οποίας η τιμή αντικαθιστά το όνομά της κάθε φορά που αυτό το όνομα χρησιμοποιείται μεταξύ των συμβόλων ποσοστού. Έτσι, εάν δοθεί (μια μεταβλητή που απαιτούν πολλά παιχνίδια που χρησιμοποιούν κάρτα ήχου υπολογιστή):

ΣΕΤ BLASTER=A220 I5 D1 P330

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

ECHO %BLASTER%

Στην οθόνη θα εμφανιστεί το "A220 I5 D1 P330". Οι μεταβλητές που ορίζονται χρησιμοποιώντας τη δήλωση SET ονομάζονται μεταβλητές περιβάλλοντος και είναι ορατές μετά την εκτέλεση έως ότου γίνει επανεκκίνηση του DOS (εκτός εάν αλλάξει χειροκίνητα στη μνήμη). Δηλαδή, μπορεί να χρησιμοποιηθεί από ένα αρχείο δέσμης ή πρόγραμμα αφού καθοριστεί σε άλλο. Η πιο γνωστή είναι η μεταβλητή PATH, η οποία είναι ένα σύνολο διαδρομών για γρήγορη αναζήτηση αρχείων. Έχει οριστεί στο αρχείο autoexec.bat.

Μεταβλητές Γραμμής Εντολών
(παράμετροι για την κλήση του αρχείου bat)

%<цифра 0-9>

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

Μπορεί να υπάρχουν συνολικά 10 ανεξάρτητες μεταβλητές ταυτόχρονα. Αυτό είναι αρκετά μικρό για τη σύνταξη σύνθετων προγραμμάτων, αν και 3-4 είναι συχνά αρκετά για συνηθισμένη εργασία. Η τιμή της μεταβλητής είναι ίση με την τιμή της αντίστοιχης παραμέτρου από τη γραμμή εντολών. Η μεταβλητή %0 θα περιέχει το όνομα του αρχείου .bat και, εάν το έχετε καθορίσει, τη διαδρομή προς αυτό. Δηλαδή, εάν εκτελέσατε το αρχείο abc.bat με τις ακόλουθες παραμέτρους:

abc.bat a bc ορ

τότε η μεταβλητή %0 θα περιέχει την τιμή abc.bat , το %1 θα περιέχει την τιμή a , το %2 θα περιέχει bc και το %3 θα περιέχει def . Αυτή η ιδιότητα χρησιμοποιείται ευρέως για τη δημιουργία ευέλικτων ομαδικών αρχείων όταν αντιμετωπίζετε επαναλαμβανόμενες λειτουργίες.

Για να λάβετε περισσότερες από 10 μεταβλητές από τη γραμμή εντολών, μπορείτε να χρησιμοποιήσετε την εντολή SHIFT.

Η εντολή SHIFT σάς επιτρέπει να χρησιμοποιείτε περισσότερες από 10 παραμέτρους γραμμής εντολών, ωστόσο, οι αντίστοιχες προηγούμενες παράμετροι χάνονται. Με άλλα λόγια, η εντολή SHIFT μετατοπίζει όλες τις τιμές των μεταβλητών ένα βήμα προς τα αριστερά. Δηλαδή, η μεταβλητή %0 θα περιέχει την τιμή που περιλαμβανόταν προηγουμένως στη μεταβλητή %1 και η μεταβλητή %1 θα περιέχει την τιμή της μεταβλητής %2 πριν από τη μετατόπιση. Ωστόσο, αυτή η λειτουργία είναι μη αναστρέψιμη, δηλαδή είναι αδύνατη η μετατόπιση των μεταβλητών προς τα πίσω.

IF υπό όρους χειριστή

Ευτυχώς, ο διερμηνέας εντολών cmd.exe των σύγχρονων Windows 2000 και μεταγενέστερων εκδόσεων υποστηρίζει μπλοκ εντολών σε κατασκευές διακλάδωσης, εξαλείφοντας την ανάγκη για IF με ετικέτες. Τα μπλοκ εντολών περικλείονται σε παρένθεση. Μοιάζει με αυτό (απομίμηση στυλ εσοχής C/C++):

αν συνθήκη (

Εντολές Rem του κλάδου «τότε».

Ρεμ...

) άλλο (

Εντολές Rem του κλάδου «άλλο».

Ρεμ...

Ειδικό παράδειγμα χρήσης:

@echo off

ορίστε BUILDMODE=%1

εάν "%BUILDMODE%" == "" (

Echo FAIL: Απαιτείται όρισμα ^(--debug, --release^)

Έξοδος /b 1

rem Καταργήστε όλες τις παύλες από το όρισμα για να απλοποιήσετε την επεξεργασία

ορίστε BUILDMODE=%BUILDMODE:-=%

if "%BUILDMODE%" == "debug" (

Ορίστε CCFLAGS=/Od /MDd /Z7

) άλλο (

Ρύθμιση CCFLAGS=/O2 /MD

Κατά τη γνώμη μου, αυτό είναι πολύ πιθανό να το ζήσεις. Όμως, όπως πάντα, η ζωή δεν είναι τόσο απλή όσο φαίνεται. Υπάρχει ένα πρόβλημα. Οι μεταβλητές που χρησιμοποιούνται στα μπλοκ then and else επεκτείνονται πριν από την έναρξη της εκτέλεσης των μπλοκ και όχι κατά την εκτέλεση. Στο παραπάνω παράδειγμα αυτό δεν προκαλεί κανένα πρόβλημα, αλλά στο παρακάτω θα:

if "%BUILDMODE%" == "debug" (

Echo INFO: Ρύθμιση της λειτουργίας εντοπισμού σφαλμάτων περιβάλλοντος

Ορισμός OPTFLAGS=/Od

Ορίστε CCFLAGS=%OPTFLAGS% /MDd /Z7

) άλλο (

Echo INFO: Ρύθμιση της λειτουργίας απελευθέρωσης περιβάλλοντος

Ορίστε OPTFLAGS=/O2

Ορίστε CCFLAGS=%OPTFLAGS% /MD

Το πρόβλημα είναι ότι και στα δύο μπλοκ, η αντικατάσταση της μεταβλητής OPTFLAGS θα συμβεί πριν αλλάξει κατά την εκτέλεση αυτού του μπλοκ. Αντίστοιχα, το CCFLAGS θα γεμίσει με την τιμή που είχε το OPTFLAGS τη στιγμή που η εκτέλεση αυτού του μπλοκ ξεκίνησε.

Αυτό το πρόβλημα επιλύεται με τη χρήση καθυστερημένης επέκτασης μεταβλητής. Μεταβλητές που περιέχονται στο !…! αντί για %...% , η σημασία τους θα αποκαλυφθεί μόνο τη στιγμή της άμεσης χρήσης. Αυτή η λειτουργία είναι απενεργοποιημένη από προεπιλογή. Μπορείτε να το ενεργοποιήσετε είτε χρησιμοποιώντας το διακόπτη /V:ON όταν καλείτε το cmd.exe είτε χρησιμοποιώντας την εντολή:

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

Με αυτά τα λόγια, το προηγούμενο "λάθος" παράδειγμα θα μπορούσε να διορθωθεί ως εξής:

setlocal enabledelayedexpansion

if "%BUILDMODE%" == "debug" (

Echo INFO: Ρύθμιση περιβάλλοντος λειτουργίας εντοπισμού σφαλμάτων

Ορισμός OPTFLAGS=/Od

Ορίστε CCFLAGS=!OPTFLAGS! /MDd /Z7

) άλλο (

Echo INFO: Ρύθμιση περιβάλλοντος λειτουργίας απελευθέρωσης

Ορίστε OPTFLAGS=/O2

Ορίστε CCFLAGS=!OPTFLAGS! /MD

Τώρα αυτό είναι σχεδόν ένα πλήρες μπλοκ αν-τότε-άλλο. Σχεδόν, επειδή αν συναντήσετε μια παρένθεση κλεισίματος σε μια από τις εντολές echo, πρέπει να διαφύγετε με έναν χαρακτήρα ^, διαφορετικά ο αναλυτής θα μπερδευτεί...

Αλλά σε κάθε περίπτωση, αυτό είναι πολύ καλύτερο από τον τρελό αριθμό ετικετών και μεταβάσεων.

Λειτουργίες

Είναι δυνατή η δημιουργία μιας συνάρτησης σε ένα αρχείο bat; Ναι μπορείς. Επιπλέον, μερικές φορές είναι ακόμη και απαραίτητο. Είναι αλήθεια ότι αυτές μπορούν να ονομαστούν συναρτήσεις υπό όρους.

Υπάρχει μια ειδική σύνταξη για την εντολή κλήσης, η οποία σας επιτρέπει να μεταβείτε σε ένα σημάδι στο ίδιο αρχείο bat, θυμίζοντας το μέρος από όπου έγινε αυτή η κλήση:

ορίσματα call:label

Η συνάρτηση επιστρέφεται με την εντολή:

έξοδος /b [προαιρετικός κωδικός επιστροφής]

Το πλήκτρο /b είναι πολύ σημαντικό εδώ: χωρίς αυτό, δεν θα βγείτε από τη συνάρτηση, αλλά από το σενάριο γενικά.

Για λεπτομέρειες, πληκτρολογήστε στη γραμμή εντολών:

κλήση/;

έξοδος /?

Είναι ενδιαφέρον ότι η εντολή κλήσης με αυτήν τη σύνταξη υποστηρίζει αναδρομικές κλήσεις με αυτόματη δημιουργία ενός νέου πλαισίου για μεταβλητά ορίσματα %0-%9. Μερικές φορές αυτό μπορεί να είναι χρήσιμο. Ακολουθεί ένα κλασικό παράδειγμα αναδρομικού παραγοντικού υπολογισμού στη γλώσσα εντολών:

@echo off

κλήση:παραγοντικό %1

ηχώ %RESULT%

έξοδος

rem Συνάρτηση για τον υπολογισμό της παραγοντικής τιμής

rem Είσοδος:

rem %1 Ο αριθμός για τον οποίο θέλετε να υπολογίσετε το παραγοντικό

rem Έξοδος:

rem %RESULT% Παραγοντική τιμή

:παραγοντικό

αν %1 == 0 (

Ορίστε RESULT=1

Έξοδος /b

αν %1 == 1 (

Ορίστε RESULT=1

Έξοδος /b

ορίστε /a PARAM=%1 - 1

κλήση:παραγοντικό %PARAM%

set /a RESULT=%1 * %RESULT%

έξοδος /β

Παράδειγμα εργασίας:

> factorial.bat 10

3628800

Χρήση τιμών επιστροφής
(επεξεργασία κωδικού εξόδου προγράμματος)

Όταν οποιοδήποτε πρόγραμμα ολοκληρώσει την εργασία του, επιστρέφει τον κωδικό τερματισμού του στο λειτουργικό σύστημα. Είναι σύνηθες να επιστρέφετε το μηδέν μετά την επιτυχή ολοκλήρωση, διαφορετικά ένας κωδικός σφάλματος. Μερικές φορές, ή μάλλον συχνά, ένα πρόγραμμα επιστρέφει "σκόπιμα" μια μη μηδενική τιμή, ώστε ορισμένες λεπτομέρειες της λειτουργίας του να μπορούν να "μάθουν" στο αρχείο δέσμης. Για παράδειγμα, το πρόγραμμα επιστρέφει τον κωδικό του πατημένου πλήκτρου και το αρχείο .bat εκτελεί διάφορες ενέργειες βάσει αυτού.

Πώς μπορεί ένα αρχείο δέσμης να βρει τον κωδικό εξόδου του εκτελεσμένου προγράμματος; Για το σκοπό αυτό παρέχεται η μεταβλητή κλειδιού ERRORLEVEL.

Παράδειγμα ομαδικού αρχείου με επίπεδα σφαλμάτων:

@ECHO OFF

REM Εκτελέστε το πρόγραμμα prg1.exe

PRG1.EXE

Ανάλυση κώδικα ολοκλήρωσης REM

ΑΝ ΒΡΕΘΗΚΕ ΕΠΙΠΕΔΟ ΣΦΑΛΜΑΤΟΣ 2 GOTO FILENOT

ΕΑΝ ΕΠΙΠΕΔΟ ΣΦΑΛΜΑΤΟΣ 1 GOTO WRITEERR

ΑΝ ΕΠΙΠΕΔΟ ΣΦΑΛΜΑΤΟΣ 0 GOTO EXITOK

GOTO ONEXIT

:ΤΟ ΑΡΧΕΙΟ ΔΕ ΒΡΕΘΗΚΕ

Σφάλμα ECHO! Το αρχείο δε βρέθηκε!

GOTO ONEXIT

:ΣΥΓΓΡΑΦΕΑΣ

ECHO Σφάλμα εγγραφής!

GOTO ONEXIT

:EXITOK

ECHO Το πρόγραμμα ολοκληρώθηκε με επιτυχία.

GOTO ONEXIT

:ONEXIT

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

Αυτό είναι το πιο συνηθισμένο σφάλμα σε αυτού του είδους τα προγράμματα.



Έχετε ερωτήσεις;

Αναφέρετε ένα τυπογραφικό λάθος

Κείμενο που θα σταλεί στους συντάκτες μας: