Aktionen

AutoIt:Batchdatei beim Ausführen verstecken

Aus znilwiki

Download: HideBatchWindow.exe
Siehe auch: HideBatchWindow.exe - Batch Dateien (.cmd / .bat) ohne sichtbares DOS-Fenster ausführen


Diese Tool startet eine Batch-Datei ohne das sich dabei ein DOS-Fenster öffnet.

HideBatchWindow-001.gif



und das ist der Quellcode hierzu (mit hoffentlich ausreichend Kommentaren): (HideBatchWindow.au3)

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=..\znil.ico
#AutoIt3Wrapper_Res_Description=Batch versteckt starten
#AutoIt3Wrapper_Res_Fileversion=1.0.0.14
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=2011 von Bernhard Linz - http://znil.net
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;HideBatchWindow.exe
;
;Programm zum versteckten ausführen von Batchdateien
;
;Aufruf:  hidebatchwindow.exe [/wait] [Laufwerk:][Pfad][Batchdatei]
;
;2011 Bernhard Linz
;Email: Bernhard.Linz@datagroup.de
;Email: Bernhard@znil.net
;
;beim Compilen darf "Create CUI instead of GUI" NICHT (NICHT!) gestezt werden - sonst gibt es doch ein sichtbares Fenster!
;
#Include <WinAPI.au3>
;                          10        20        30        40        50        60        70        80
;                 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $Header =    @CRLF & _
				 @CRLF & _
				 "HideBatchWindow.exe - 2011 von Bernhard Linz für http://znil.net" & @CRLF & _
                 "Kontakt: Bernhard@znil.net" & @CRLF & _
				 @CRLF

;                          10        20        30        40        50        60        70        80
;                 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $HilfeText = "Startet eine Batchdatei versteckt, also ohne ein DOS-Fenster zu zeigen." & @crlf & _
				 @CRLF & _
				 "Aufruf:" & @CRLF & _
                 @ScriptName & " [/wait] [Laufwerk:][Pfad][Batchdatei] [Parameter]" & @CRLF & _
				 @CRLF & _
				 "/wait                         : Auf das Beenden der Batchdatei warten" & @CRLF & _
				 "                                (sonst selbst beenden)" & @CRLF & _
				 "[Laufwerk:][Pfad][Batchdatei] : Pfad zur Batchdatei" & @CRLF & _
				 "[Parameter]                   : eventuelle Parameter für die Batchdatei" & @CRLF & _
				 "                                (die diese Verarbeitet)" & @CRLF & _
				 @CRLF & _
				 "zum Beispiel:  " & @ScriptName & " test.cmd" & @CRLF & _
				 "               " & @ScriptName & " C:\Scripte\test.cmd" & @CRLF & _
				 "               " & @ScriptName & " \\server\freigabe\test.cmd" & @CRLF & _
				 "               " & @ScriptName & " /wait \\server\freigabe\test.cmd" & @CRLF & _
				 "               " & @ScriptName & " \\server\freigabe\test.cmd par1 par2" & @CRLF & _
				 @CRLF & _
				 "Bei Leerzeichen im Pfad bitte in Anführungszeichen setzen!" & @CRLF & _
				 @CRLF

Dim $Befehlzeile
Dim $ZeigerConsole

Func _HilfeAusgeben()
	_WinAPI_AttachConsole()
	$ZeigerConsole = _WinAPI_GetStdHandle(1)
	_WinAPI_WriteConsole($ZeigerConsole,$Header)
	_WinAPI_WriteConsole($ZeigerConsole,$HilfeText)
	Send("{Enter}")
EndFunc



;testen ob wir überhaupt mit einem parameter gestartet wurden - sonst Hilfe ausgeben
If $CmdLine[0] = 0 Then
	_HilfeAusgeben()
	Exit
EndIf

;testen ob der Parameter 1 ist auf "/?" testen und ebenfalls Hilfe ausgeben
If $CmdLine[1] = "/?" Then
	_HilfeAusgeben()
	Exit
EndIf

;testen ob nur 1 Parameter gesetzte wurde und ein Schlauberger hier nur /wait angebene hat - dann Hilfe ausgeben
If StringCompare($CmdLine[1], "/wait", 0) = 0 And $CmdLine[0] = 1 Then
	_HilfeAusgeben()
	Exit
EndIf

;testen ob der /wait Parameter gesetzt wurde oder nicht und ;testen ob es die übergebene Datei überhaupt gibt:
If StringCompare($CmdLine[1], "/wait", 0) = 0 Then
	If FileExists($CmdLine[2]) Then
		$Befehlzeile = ""
		For $i = 2 To $CmdLine[0]
			$Befehlzeile = $Befehlzeile & $CmdLine[$i] & " "
		Next
		RunWait(@ComSpec & " /c " & $Befehlzeile, "", @SW_HIDE)
	EndIf
Else
	If FileExists($CmdLine[1]) Then
		$Befehlzeile = ""
		For $i = 1 To $CmdLine[0]
			$Befehlzeile = $Befehlzeile & $CmdLine[$i] & " "
		Next
		Run(@ComSpec & " /c " & $Befehlzeile, "", @SW_HIDE)
	EndIf
EndIf


cronus

63 Monaten zuvor
Punktzahl 0++

So geht es auch...

C:\>C:\Batch\Test\Min-test.cmd main dir "%temp%\*.log"

REM Min-test.cmd @echo off if not "%1"=="" goto %1

start /MIN cmd.exe /C "%~nx0 main" goto:eof

main

SHIFT /1 echo Hallo, ich laufe minimiert! %1 %2 pause

goto:eof

BLinz

63 Monaten zuvor
Punktzahl 0++

Ja, schön .. minimiert. Aber eben nicht versteckt.

Wenn du erst einmal Benutzer hattest die bei der Anmeldung das Fenster des Anmeldescriptes geschlossen haben und dann meckern das Drucker und Laufwekre fehlen :-)

Bernhard

lfnnx

8 Monaten zuvor
Punktzahl 0++
Macht das was es soll! Gute Arbeit dude!
Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen.