Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Problem mit batch beim schreiben in .log- und txt-Dateien (UnixToolsForwindows bringt auch nichts), Versuch über zweite batch klappt auch nicht

Frage Entwicklung Batch & Shell

Mitglied: bugmenot

bugmenot (Level 1) - Jetzt verbinden

15.08.2008, aktualisiert 18.08.2008, 10864 Aufrufe, 11 Kommentare

Ich habe ja nichts gegen knobeln und aufgeben mag ich auch nicht, aber hier weiß ich einfach nicht mehr weiter.

Ich habe eine batch deren Inhalt als log und txt-Datei ausgegeben und weiterverarbeitet werden soll. Nun lässt es sich ja unter Windows leider nicht realisieren, dass durch die Verwendung der beiden Operatoren “>>“ das ganze gleichzeitig in der Konsole angezeigt und in die Dateien geschrieben wird.

Wenn ich nun aber einfach weiter unten in der batch folgendes einsetze

eml2.bat >> D:\cwRsync-Intern-%date%.txt

schreibt er mir zwar bis genau zu dieser Zeile die batsch in die beiden Dateien, führt das Skript aber nicht zu Ende und bleibt einfach stehen, so das die weiteren befehle nicht ausgeführt werden können. Ich kann mir gut vorstellen, dass sich hier die Katze die ganze Zeit in den ### beißt…

Da ich (hier?) irgendwo gelesen habe, dass durch UnixToolsForwindows der Befehl “tee“ verwendet werden kann, hab ich das auch mal ausprobiert. Leider funktioniert das aber auch nicht. Er zeigt mit dann zum Beispiel in der betreffenden Zeile in der Konsole immer

15.08.2008 tee D:\cwRsync-Intern-%date%.txt

an. Ich habe da auch schon länger im Internet nachgeschaut, verschiedene Varianten und Ergänzungen ausprobiert, aber nichts gefunden was das Problem gelöst hat.

Schon mal danke fürs lesen

Gruß

. . .

Noch mal Hallo

Da ich das Problem so nicht lösen konnte, habe ich mir eine zweite batch geschrieben, die durch die erste aufgerufen wird.

Die zweite wird in der ersten durch

Call mitschreiben.bat

aufgerufen.

Die zweite enthält die Zeile

eml2.bat >> D:\eml2-%date%.txt

Das Problem ist nun, dass er mir in der Konsole alles bis zu der Zeile

Call mitschreiben.bat

anzeigt, dann aber die Fehlermeldung „Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird“ ausgibt.
Das absurde ist dabei, das die nach dem Call-Befehl geplante Ja/Nein-Abfrage und die daraus resultierenden Aufgaben durchgeführt und deren Ergebnisse ebenfalls in die txt-Datei ausgegeben werden können, obwohl er die ganze Zeit nur diese Fehlermeldung anzeigt.

Gruß
Mitglied: Top44
15.08.2008 um 10:02 Uhr
Moin, ich meine doch du müsstest ein CALL bzw. Start davor setzten.

grüße
Bitte warten ..
Mitglied: bugmenot
15.08.2008 um 15:41 Uhr
Hallo

Bei “call“ erhalte ich die Fehlermeldung, dass nicht auf den Prozess zugegriffen werden kann, da er von einem anderen Prozess verwendet wird.

Bei “start“ öffnet er mir die batch noch mal, und zeigt dann in ihr ebenfalls die obige Fehlermeldung an.

Das spricht also alles irgendwie für die Katze-###-Theorie.
Vielleicht muss ich das einfach über eine zweite batch realisieren.

Trotzdem danke

Gruß
Bitte warten ..
Mitglied: AndreasA
15.08.2008 um 17:19 Uhr
Hallo bugmenot,

definiere in deinem Windowsbatch die Ausgabedatei als Variable

SET AUSGABETXT=D:\cwRsync-Intern-%date%.txt

Jede Zeile die nun in diese Textdatei geschrieben werden soll

befehl | tee -a %ausgabetxt%

sollte erstmal Ausgabe auf Console und in die Txt-Datei schreiben.

Bis hierhin soweit einfach zu realisieren. Jetzt der ungetestete Ansatz:
rufe dein Skript (z.B. batch.cmd) auf der Kommandozeile folgendermaßen auf
batch.cmd | tee -a batch.log

Das heisst nun müsste alles was dein Skript macht in die Textdatei geschrieben werden und die Ausgabe deines Skriptes auf der Kommandozeile alles in die Logdatei (batch.log) schreiben.

Habe jetzt kein tee.exe zum testen hier, aber ein Versuch ist es Wert.

Gruß AndreasA
Bitte warten ..
Mitglied: bugmenot
15.08.2008 um 17:50 Uhr
Hallo

Ich hab die batch als Variable definiert und dann folgendes ausprobiert

befehl | tee -a %ausgabetxt%

Dabei bricht er aber auch direkt ab und die Konsole wird geschlossen.

Lasse ich den Operator “|“ weg, schreibt er mir wieder nur die ganze Zeile in die Konsole aber nicht in die Dateien.

Um deinen zweiten Vorschlag auszuprobieren hab ich

eml2.bat tee | -a D:\cwRsync-Intern-%date%.txt

in eine der Zeilen geschrieben. Er zeigt mir dann den Inhalt bis zu eben dieser Zeile an und bricht ab. In die Dateien wird dabei leider auch nichts geschrieben.

Trotzdem danke

Gruß
Bitte warten ..
Mitglied: AndreasA
16.08.2008 um 10:49 Uhr
Hallo nochmal,

kurze Anmerkung hast du die Datei

D:\cwRsync-Intern-%date%.txt vorher schon initialisiert? D.h. existiert die Datei für z.B. heute
D:\cwRsync-Intern-16.08.2008.txt schon bevor du sie mit der Umleitung ansprichst? Wenn nein, ist klar warum er an der Stelle abbricht. Er würde bei jeder Zeile versuchen sie neu zu erstellen. Deshalb ja mein Vorschlag diese Datei als Variable zu definieren und sie vor irgendeiner Umleitung einmal zu initialisieren.

Versuchs mal
Bitte warten ..
Mitglied: bugmenot
17.08.2008 um 06:43 Uhr
Hallo

Sie als Variable zu definieren ist kein Problem, aber was meinst du denn mit "initialisieren"?

Gruß
Bitte warten ..
Mitglied: AndreasA
17.08.2008 um 17:39 Uhr
Hallo

Mit "initialisieren" meine ich diese Datei vorher zu erzeugen... z.B. so

set ausgabedatei=D:\cwRsync-Intern-%date%.txt
echo.>%ausgabedatei%
D.h. ab hier existiert deine Datei schon und dann in deinem Skript weiter
......
em2l.bat | tee -a %ausgabedatei%

Soweit verstanden?
Bitte warten ..
Mitglied: bugmenot
17.08.2008 um 19:37 Uhr
Habe ich ausprobiert

Tee scheint nicht zu funktionieren und ich versuche mal herauszufinden warum. Aber eigentlich müsste es doch mit der Umleitung auch funktionieren…

Noch was zu meinem Versuch mit der Umleitung:
Es kommt immer noch die Fehlermeldung. „Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.“ Obwohl er, wie gesagt, alles aufzeichnet.

Ich denke, das Problem liegt darin, dass die zweite Batch die erste bis zum Ende aufzeichnen will. Da diese aber nicht fertig ist, kann es nicht weitergehen. Mir ist rätselhaft, wo ich diese nun beenden kann, da es ja, wenn es so ist, keine Möglichkeit dazu gibt eine Befehlszeile so zu platzieren ,das die zweit Batch ihre Tätigkeit einstellt und die erste ihre weiterführt.

Gruß
Bitte warten ..
Mitglied: AndreasA
17.08.2008 um 21:57 Uhr
Hast du die tee.exe im Suchpfad (Variable %PATH%) enthalten? Wenn nein dann musst du in deinem Skript den Pfad zur tee.exe mit angeben.

befehl | "Pfad zu tee.exe\tee.exe" -a %ausgabedatei%

ich habe grade mal die aktuellen Unixtools geladen und mit der tee.exe funktioniert das, was du vorhast problemlos.

Was die Fehlermeldung angeht: Du darfst natürlich nicht das Skript und den Befehl im Skript an die gleiche Logdatei umleiten. Dann kommt genau von dir benannte Fehlermeldung.

Also zusammengefasst sollte alles so funktionieren:

  • Dein Skript (sagen wir mal hauptskript.cmd) schreibt alle gewünschten Ausgaben neben der Console noch in eine Logdatei (namens %logdat%)
.... REM hauptscript.cmd .....

SET LOGDAT=D:\cwRsync-Intern-%date%.log
SET UNIXTOOLS="Pfad zur TEE.exe"

...

befehl1 | %unixtools%\tee -a %logdat%
....
befehl x | %unixtools%\tee -a %logdat%
... u.s.w

  • du rufst dein Hauptskript mit nem Hilfsskript (helpwrite.cmd) oder direkt auf der Console mit Umleitung in eine Textdatei (%txtout%) auf

.... REM helpwrite.cmd ......
SET TXTOUT=D:\cwRsync-Intern-%date%.txt
SET UNIXTOOLS="Pfad zur TEE.exe"

hauptscript.cmd | %unixtools%\tee -a %txtout%

  • somit hast du nun 2 Dateien
    1. eine D:\cwRsync-Intern-%date%.log in dem die Ausgaben aller Befehle stehen, die du in deinem Hauptskript neben der Console umgeleitet hast
    2. und eine D:\cwRsync-Intern-%date%.txt, in der alles steht, was dein Hauptskript auf der Console ausgibt
  • und kannst alles auf der Console nebenbei lesen
Bitte warten ..
Mitglied: bugmenot
18.08.2008 um 07:20 Uhr
Aahh. Anders als in der Anleitung beschrieben, musste ich unter Systemeigenschaften – Umgebungsvariablen – Systemvariablen bei „Pfad“ den gesamten Pfad, „;C:\Programme\UnixToolsForWindows\usr\local\wbin\“ angeben, statt nur „usr\local\wbin\“.

Tee funktioniert nun also. Allerdings nur wen ich z.B.

Echo Bla Bla | tee -a D:\eml2-%date%.txt

schreibe.

Setze ich eine Variable, z.B.

set log=%D:\eml2-%date%.txt%

und gebe den Befehl

Echo Bla Bla | tee -a %log%

funktioniert es nicht. Warum auch immer.

Vielen Dank für deine Hilfe und deine Ausdauer

Gruß
Bitte warten ..
Mitglied: AndreasA
18.08.2008 um 10:01 Uhr
Schön das es funktioniert.
Zu deiner letzten Frage: Nimm einfach die %-zeichen weg dann geht auch das also
set log=D:\eml2-%date%.txt

Bitte gern geschehen.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Batch & Shell
gelöst Mittels Batch alle .txt Dateien eines Verzeichnises ändern (10)

Frage von mttspeedy zum Thema Batch & Shell ...

Batch & Shell
gelöst Grosses Variablen Problem ( Batch) (30)

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...