Batch Batch-Datei unsichtbar starten

EherNeu1

Cadet 1st Year
Registriert
Feb. 2016
Beiträge
13
Hallo!
Ich habe eine kleine Batch Datei geschrieben
Code:
 @echo off
echo [%DATE%] %USERNAME% logged in >> C:/login/login.txt
also eine Sache, mit der ich meinen PC überwachen kann. Mun möchte ich das Programm noch erweitern, was ich auch geschafft habe, aber dieses CMD Fenster ist immer sichtbar und in der Taskleiste. Kann ma da etwas machen, damit es unsichtbar ist?
 
Alternativ zum vorgenannten nutze ich noch cmdow.
Melden sich denn noch andere Personen an deinem Rechner an? Und konnte man Anmeldungen nicht evtl. sowieso in der Ereignisanzeige sehen?
 
Da eine Batch mittlerweile so schnell abgearbeitet wird...
1. cls
2. @echo off
3. echo [%DATE%] %USERNAME% logged in >> C:/login/login.txt
4. cls

cls= clear screen

​vielleicht ist das etwas für dich
 
Hm, wieso bleibt denn dein CMD Fenster stehen?
Sollte eigentlich nur kurz sichtbar sein.

Wie startest Du das denn? Sollte eigentlich entweder als Logon Script ausgeführt werden, oder über den Task Planer oder über den Autostart.
 
Hi,
mal ein anderer Ansatz:
Kannste da nicht die Events im Windows Event-Viewer filtern?
Ich glaube der loggt das eh mit. Du musst nur wissen wonach Du filtern musst.
Ist vielleicht effizienter, als das selber mit zu loggen.

Vielleicht kannst du mal skizzieren, was Du genau loggen willst bzw. was das Ziel ist.
Ist immer besser als eine "harte" technische Vorgabe.
 
starte die batch doch mit start /min parameter.
Code:
start /min log.bat
 
Also, ich will mitloggen, wann welcher Benutzer sich eingeloggt hat, und danach in einer Schleife jede 60 Sekunden eine Nachricht mit Uhrzeit in die login.txt, damit ich abschätzen kann, wann der PC heruntergefahren worden ist. Und dann bleibt das Fenster immer sichtbar. Die Datei ist im Autostart.
Ergänzung ()

Danke, aber das CMD Fenster ist trotzdem immer offen, weil ich danach noch eine Loop hinzugefügt habe.
 
Mit den oben genannten hide.exe oder cmdow.exe kann man Konsolenfenster versteckt im Hintergrund laufen lassen.
Das Loggen sollte natürlich nur mit Wissen der anderen Benutzer ausgeführt werden und nicht heimlich.

Und ob eine Batch überhaupt die beste Lösung für deine Ansprüche ist, steht ja auch noch in Frage. Eine Batch unsichtbar starten ist jedenfalls mit den genannten Tools möglich.
 
Zuletzt bearbeitet:
Es geht auch mit einem kleinen vbs Script.

Vermutlich startest Du aus der Batch ein Programm, was nicht zurück kommt. Du könntest auch cmd in der Batch dazu nutzen. Schaue dir die Kommandozeilenparameter dazu an.
 
@miac Wie kommst du denn zu dieser Annahme? Der TE schreibt doch, dass er in einer Schleife einfach alle 60s etwas ausgibt. Ist ja logisch, dass die Batch dazu die ganze Zeit läuft.
 
Naja, er will das machen. Wußte nicht, daß das schon realisiert ist, hätte er ja im Coding des Eingangsposts einbringen können.

Sowas ist dann aber eigentlich besser über den Taskplaner zu machen. Trotzdem wäre hier ein vbs Script besser.
 
Batchdatei unsichtbar ausführen? Siehe extra zusammengeklöppeltes Progrämmchen anbei.

Achtung: Wenn die Batchdatei stehen bleibt (z.B. durch "pause" oder etwa aufgrund möglicherweise nicht vorhandener Benutzerrechte), kommt keine Meldung, das ganze ist auf maximale Unsichtbarkeit getrimmt.

Anhang anzeigen RBI_Binary.zip
Anhang anzeigen RBI_Source.zip

Quellcode (VB6):
Code:
Option Explicit

Private Declare Function ShellExecuteA Lib "shell32.dll" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private BatchPath As String

Private Function ShellExec(ByVal Path As String, Optional ByVal WindowStyle As VbAppWinStyle = vbNormalFocus, Optional ByVal Operation As String = "open") As Boolean
    
ShellExec = (ShellExecuteA(0&, Operation, Path, vbNullString, vbNullString, WindowStyle) > 32)

End Function

Private Function FileExists(FileName As String) As Boolean

On Error Resume Next
FileExists = Not CBool(GetAttr(FileName) And (vbDirectory Or vbVolume))

End Function

Private Function RunBatch()

Call ShellExec(BatchPath, vbHide)

End Function

Private Sub Command1_Click()

BatchPath = Form1.Text1
If FileExists(BatchPath) Then RunBatch Else Call MsgBox("Datei existiert nicht. Pfad korrekt angegeben?", vbCritical)

End Sub

Private Sub Command2_Click()

Unload Me

End Sub

Private Sub Form_Load()

If Command$ <> "" Then
    BatchPath = Command$
    If FileExists(BatchPath) Then RunBatch
    Unload Me
End If

End Sub
 
Zurück
Oben