Der einfache naive Weg, der langsam ist, weil er den Dateizeiger mehrmals öffnet und auf das Dateiende positioniert.
@echo off
command1 >output.txt
command2 >>output.txt
...
commandN >>output.txt
Ein besserer Weg - einfacher zu schreiben und schneller, da die Datei nur einmal geöffnet und positioniert wird.
@echo off
>output.txt (
command1
command2
...
commandN
)
Ein weiterer guter und schneller Weg, der die Datei nur einmal öffnet und positioniert
@echo off
call :sub >output.txt
exit /b
:sub
command1
command2
...
commandN
Bearbeiten Sie 2020-04-17
Von Zeit zu Zeit möchten Sie möglicherweise wiederholt in zwei oder mehr Dateien schreiben. Möglicherweise möchten Sie auch andere Nachrichten auf dem Bildschirm anzeigen. Es ist weiterhin möglich, dies effizient zu tun, indem Sie zu undefinierten Handles außerhalb eines Blocks oder einer Unterroutine in Klammern umleiten und dann die &
Notation verwenden, um auf die bereits geöffneten Dateien zu verweisen.
call :sub 9>File1.txt 8>File2.txt
exit /b
:sub
echo Screen message 1
>&9 File 1 message 1
>&8 File 2 message 1
echo Screen message 2
>&9 File 1 message 2
>&8 File 2 message 2
exit /b
Ich habe mich für die Verwendung der Handles 9 und 8 in umgekehrter Reihenfolge entschieden, da auf diese Weise eine potenzielle dauerhafte Umleitung aufgrund eines Konstruktionsfehlers bei der Implementierung der Microsoft-Umleitung eher vermieden wird, wenn mehrere Umleitungen mit demselben Befehl ausgeführt werden. Es ist höchst unwahrscheinlich, aber selbst dieser Ansatz könnte den Fehler aufdecken, wenn Sie sich genug anstrengen. Wenn Sie die Umleitung durchführen, wird das Problem garantiert vermieden.
3>File1.txt ( 4>File2.txt call :sub)
exit /b
:sub
etc.
%~f0
Gibt beispielsweise immer den vollständigen Pfad zum Batch-Skript an, auch wenn Sie sich in einer CALLed: -Unterroutine befinden.>output.txt 2>&1
cmd /?
oderhelp cmd
über die Konsolenbefehlszeile zur Dokumentation. Der Trick der dritten Methode besteht darin, dass die Umleitung auf dem CALL für alle Befehle innerhalb der CALLed-Subroutine gilt.Wenn Sie möchten, dass sowohl Out- als auch Err-Streams umgeleitet werden
quelle
>>
an angehängt wirda.txt
.a.txt
Verwenden Sie zum Überschreiben stattdessen>
. stackoverflow.com/q/4458231/1098302Ich weiß, dass dies ein älterer Beitrag ist, aber jemand wird in einer Google-Suche darauf stoßen und es sieht auch so aus, als ob einige Fragen, die das OP in Kommentaren gestellt hat, nicht speziell angesprochen wurden. Bitte schonen Sie mich auch, da dies meine erste Antwort auf SO ist. :) :)
Um die Ausgabe unter Verwendung eines dynamisch generierten Dateinamens in eine Datei umzuleiten, ist mein Go-to-Ansatz (sprich: schnell und schmutzig) die zweite von @dbenham angebotene Lösung. So zum Beispiel:
Erstellt eine Datei wie in diesem Screenshot der Datei im Zielverzeichnis
Das wird diese Ausgabe enthalten:
Denken Sie auch daran, dass diese Lösung vom Gebietsschema abhängig ist. Seien Sie also vorsichtig, wie / wann Sie sie verwenden.
quelle
oder
sollte die Rechnung füllen.
Wenn Sie
APPEND
die Ausgabe möchten , verwenden Sie>>
anstelle von>
.>
startet eine neue Protokolldatei.quelle
quelle
Es gibt ein cooles kleines Programm, mit dem Sie die Ausgabe in eine Datei und die Konsole umleiten können
Code-Snippet anzeigen
quelle
Ich habe den obigen Befehl in meiner Batch-Datei verwendet und er funktioniert. In der Protokolldatei werden die Ergebnisse meines Befehls angezeigt.
quelle
Fügen Sie diese beiden Zeilen oben in Ihrer Batch-Datei hinzu. Alle stdout und stderr after werden in log.txt umgeleitet:
quelle
Dies kann bei "toxischen" Zeichen in der Eingabe fehlschlagen. Wenn Sie eine Eingabe wie diese berücksichtigen, ist isAnIn ^^^^ put ein guter Weg, um zu verstehen, was los ist. Sicher gibt es eine Regel, dass eine Eingabezeichenfolge in doppelten Anführungszeichen stehen muss, aber ich habe das Gefühl, dass diese Regel nur dann eine gültige Regel ist, wenn die Bedeutung der Eingabe ein Speicherort auf einer NTFS-Partition ist (möglicherweise ist es eine Regel für URLs I. bin nicht sicher). Aber es ist natürlich keine Regel für eine beliebige Eingabezeichenfolge (es ist "eine gute Praxis", aber Sie können nicht damit rechnen).
quelle
Wenn Sie die folgenden Zeilen am Ende Ihrer Batch-Datei hinzufügen, wird alles so erfasst, wie es im CMD-Fenster angezeigt wird, und in eine Textdatei exportiert:
Grundsätzlich wird eine Auswahl aller -> In Zwischenablage kopieren -> In Textdatei einfügen ausgeführt .
quelle