2012-11-27 50 views
5

Tôi đang chạy tệp .bat cho tập lệnh của tôi (Theo lịch trình Tak (CronJob)) mỗi phút. Khi nó chạy, cửa sổ nhắc lệnh xuất hiện cho một tiểu thuyết về thời gian.Làm cách nào để ẩn cửa sổ ms-dos khi chạy tệp .bat?

Mã lô của tôi như sau;

@ECHO OFF 
C:\wamp\bin\php\php5.4.3\php.exe -f "C:\wamp\www\tst\index.php" 

Làm cách nào để ẩn cửa sổ này khi nó chạy?

Trả lời

6

Dùng Run VBScript

Set objShell = WScript.CreateObject("WScript.Shell") 
objShell.Run("C:\yourbatch.bat"), 0, True 

rằng đó sẽ chạy tập tin thực thi của bạn ẩn.

+0

Cảm ơn bạn @Bali C –

+0

@prestack Không lo lắng :) –

+0

1 Luôn luôn làm cho cái nhìn công việc của bạn chuyên nghiệp hơn khi không có nhấp nháy nhất thời của dấu nhắc lệnh – Teddy

3

Tôi không thích giải pháp VBScript.

Tải về và sao chép nircmd.exe vào thư mục %systemroot%\system32 của bạn, sau đó thêm lệnh này để dòng đầu tiên của hàng loạt của bạn:

nircmd.exe win hide ititle "cmd.exe" 

hoặc làm hàng loạt tiêu đề tùy chỉnh của bạn đầu tiên với title lệnh để tránh từ ẩn tất cả cmd cửa sổ, giống như này:

title MyBatch 
nircmd.exe win hide ititle "MyBatch" 
2

VBScript Điều này tạo ra một bản sao của tập tin thực thi của bạn trong% Temp%, thực hiện nó âm thầm và xóa nó sau đó

Dim fso 

Set fso = CreateObject("Scripting.FileSystemObject") 

Dim tempfolder 

Const TemporaryFolder = 2 

Dim WshShell, strCurDir 

Set WshShell = CreateObject("WScript.Shell") 

strCurDir = WshShell.CurrentDirectory 

batch = "@ECHO OFF" & vbCrLf & _ 
     "C:\wamp\bin\php\php5.4.3\php.exe -f C:\wamp\www\tst\index.php" 

Set tempfolder = fso.GetSpecialFolder(TemporaryFolder) 

WshShell.CurrentDirectory = tempfolder 

i=1 

n=0 

While n <> 1 

If (fso.FileExists(i&".bat")) Then 

    i = i + 1 

Else 
    n = 1 

End If 

Wend 

Set File = fso.CreateTextFile(i&".bat",True) 

File.Write batch 

File.Close 

Dim batchfile 

batchfile = fso.GetAbsolutePathName(i&".bat") 

WshShell.CurrentDirectory = strCurDir 

WshShell.Run chr(34) & batchfile & Chr(34), 0, TRUE 

fso.DeleteFile batchfile 
+0

cảm ơn bạn. Điều đó hoạt động tốt nhất – codeMonger123

0

Tôi biết bài đăng cũ nhưng đây là giải pháp của tôi, AGerman từ dostips đã giúp tôi viết mã này, rất hữu ích.

@echo off &setlocal EnableExtensions DisableDelayedExpansion 

:: Change the working directory to the directory of the batch file. 
:: If the first passed argument was ~e~ (that is, the batch file was called from the VBScript) 
:: then shift the parameters by one and continue at label :elevated 
cd /d "%~dp0"&if "%~1"=="~e~" (shift&goto :elevated) 

:: Assign the passed arguments to variable param. 
set "param=%*" 

:: NET SESSION fails if the batch code doesn't run with elevated permissions. 
:: Assign variable __verb to "open" if the batch file runs elevated or to "runas" if it doesn't run elevated 
>nul 2>&1 net session &&(set "__verb=open")||(set "__verb=runas") 

:: Assign the name of the VBScript to variable vbs. 
:: Assign the full name of the batch file to variable me. 
:: Enable delayed variable expansion. 
set "vbs=%temp%\uac.vbs"&set "me=%~f0"&setlocal enabledelayedexpansion 

:: If arguments were passed, prepare them to be passed from within the VBScript by doubling the quotation marks. 
if defined param set "param=!param:"=""!" 

:: Write the VBScript. The ShellExecute method will run the batch file in a cmd.exe process where ~e~ will be passed as 
:: first argument followed by the original arguments (saved in param). The UAC will be invoked if __verb was set to "runas". 
:: Elsewise the UAC will not be invoked. For further information about the ShellExecute method see: 
:: https://msdn.microsoft.com/en-us/library/windows/desktop/gg537745(v=vs.85).aspx 
>"!vbs!" echo CreateObject("Shell.Application").ShellExecute "!comspec!", "/c """"!me!"" ~e~ !param!""", "", "%__verb%", 0 

:: Run the VBScript in a cscript.exe process. 
:: Delete the VBScript file. 
:: Quit the batch execution. 
cscript //nologo "!vbs!"&del "!vbs!"&goto :eof 

:elevated 
::~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
:: Do your elevated stuff here...