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

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

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

Πώς λειτουργεί η έξοδος της γραμμής εντολών των Windows(How Windows Command Prompt Output Works)

Όταν πληκτρολογείτε μια εντολή στην κονσόλα των Windows ( γραμμή εντολών(command prompt) ), η έξοδος από αυτήν την εντολή πηγαίνει σε δύο ξεχωριστές ροές.

  • STDOUT : Standard Out είναι όπου πηγαίνουν οποιεσδήποτε τυπικές απαντήσεις από εντολές. Για παράδειγμα, η τυπική απόκριση για την εντολή DIR είναι μια λίστα αρχείων μέσα σε έναν κατάλογο.
  • STDERR : Το τυπικό σφάλμα(Standard Error) είναι το σημείο όπου πηγαίνουν τυχόν μηνύματα σφάλματος εάν υπάρχει πρόβλημα με την εντολή. Για παράδειγμα, εάν δεν υπάρχουν αρχεία στον κατάλογο, η εντολή DIR θα εξάγει το " File Not Found" στη ροή Standard Error .

Μπορείτε να ανακατευθύνετε την έξοδο σε ένα αρχείο στα Windows και για τις δύο αυτές ροές εξόδου.

Ανακατεύθυνση τυπικής εξόδου εγγραφής σε νέο αρχείο(Redirect Standard Output Write to New File)

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

Για να το κάνετε αυτό, ανοίξτε τη γραμμή εντολών και πληκτρολογήστε:

dir test.exe > myoutput.txt

Ο χαρακτήρας > λέει στην κονσόλα να εξάγει STDOUT στο αρχείο με το όνομα που έχετε δώσει.

Όταν εκτελείτε αυτήν την εντολή(run this command) , θα παρατηρήσετε ότι δεν υπάρχει καμία απόκριση στο παράθυρο εντολών εκτός από το σφάλμα ότι το αρχείο δεν υπάρχει.

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

Σημείωση(Note) : Προσέξτε να αλλάξετε τον ενεργό κατάλογο(change the active directory) για τη γραμμή εντολών πριν εκτελέσετε την εντολή. Με αυτόν τον τρόπο θα γνωρίζετε πού αποθηκεύονται τα αρχεία εξόδου.

Μπορείτε να δείτε την τυπική έξοδο που πήγε στο αρχείο πληκτρολογώντας "myoutput.txt" στο παράθυρο εντολών. Αυτό θα ανοίξει το αρχείο κειμένου στο προεπιλεγμένο πρόγραμμα προβολής αρχείων κειμένου. Για τους περισσότερους ανθρώπους, αυτό είναι συνήθως το Notepad.exe .

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

Ανακατεύθυνση τυπικής εξόδου(Standard Output) εγγραφής στο ίδιο αρχείο(Same File)

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

dir test.exe >> myoutput.txt

Θα δείτε την ίδια έξοδο (μόνο το σφάλμα).

Αλλά σε αυτήν την περίπτωση, αντί να αντικαταστήσει το αρχείο εξόδου, αυτή η εντολή προσαρτά τη νέα έξοδο στο υπάρχον αρχείο εξόδου.

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

Ανακατεύθυνση τυπικού σφάλματος σε αρχείο(Redirect Standard Error To a File)

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

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

Σε αυτό το παράδειγμα, θα πληκτρολογήσετε την εντολή: 

dir test.exe > myoutput.txt 2> output.err

Αυτό στέλνει την τυπική ροή εξόδου στο myoutput.txt και την τυπική ροή σφαλμάτων στο output.err. Το αποτέλεσμα είναι ότι δεν εμφανίζεται καθόλου ροή εξόδου στο παράθυρο της κονσόλας.

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

Όπως μπορείτε να δείτε, τυχόν μηνύματα σφάλματος από την εντολή εξάγονται στο αρχείο σφάλματος. Όπως(Just) και με την τυπική έξοδο, μπορείτε να χρησιμοποιήσετε το >> για να προσθέσετε το σφάλμα σε σφάλματα από εντολές που εκτελέστηκαν προηγουμένως.

Ανακατεύθυνση όλων των εγγραφών εξόδου σε ένα ίδιο αρχείο(Redirect All Output Writes to a Same File)

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

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

dir test.exe 1> myoutput.txt 2>&1

Δείτε πώς λειτουργεί αυτή η εντολή:

  • Η τυπική έξοδος κατευθύνεται στο αρχείο εξόδου που προσδιορίζεται από τον αριθμό εξόδου 1.
  • Η τυπική έξοδος σφάλματος που προσδιορίζεται από τον αριθμό 2 ανακατευθύνεται στο αρχείο εξόδου που προσδιορίζεται από τον αριθμό 1.

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

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

Σίγαση τυπικών ροών εξόδου ή σφαλμάτων(Silencing Standard or Error Output Streams)

Μπορείτε επίσης να απενεργοποιήσετε είτε την τυπική έξοδο(Standard Output) είτε το τυπικό σφάλμα(Standard Error) ανακατευθύνοντας την έξοδο σε ένα NUL αντί για ένα αρχείο.

Χρησιμοποιώντας το παραπάνω παράδειγμα, εάν θέλετε μόνο Standard Output και καθόλου Standard Error , μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή:

dir test.exe 1> myoutput.txt 2>nul

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

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

Μπορείτε να εκτελέσετε οποιαδήποτε από τις ίδιες εντολές εξόδου παραπάνω μέσα από ένα αρχείο BAT(inside a BAT file) και η έξοδος από αυτή τη γραμμή θα μεταβεί στο αρχείο εξόδου που καθορίσατε. Αυτός είναι ένας χρήσιμος τρόπος για να δείτε εάν οποιεσδήποτε εντολές σε ένα αρχείο BAT είχαν σφάλματα όταν προσπάθησαν να εκτελεστούν.



About the author

Εργάζομαι ως σύμβουλος για τη Microsoft. Ειδικεύομαι στην ανάπτυξη εφαρμογών για κινητά για συσκευές Apple και Android και ασχολούμαι επίσης με την ανάπτυξη εφαρμογών για Windows 7. Η εμπειρία μου με smartphone και Windows 7 με κάνει ιδανικό υποψήφιο για αυτή τη θέση.



Related posts