Trước tôi hay dùng Task Scheduler để gọi các Batch file, tuy nhiên khi đó cửa sổ command prompt hiện ra rất khó chịu. Dưới đây là cách để chạy file BAT mà không hiện cửa sổ này ra.
Sử dụng VBScript
Phương pháp này không cần dùng phần mềm nào bên ngoài.
Đoạn mã VBS quietrun.vbs
dưới đây sử dụng API Run
của WScript.Shell
gọi chạy một application từ dòng lệnh mà không hiện cửa sổ nhờ thiết lập tham số thứ 2 của hàm này là giá trị 0
.
If WScript.Arguments.Count >= 1 Then ReDim Args(WScript.Arguments.Count - 1) For i = 0 To WScript.Arguments.Count - 1 Arg = WScript.Arguments(i) If InStr(Arg, " ") > 0 Then Arg = """" & Arg & """" Args(i) = Arg Next CreateObject("Wscript.Shell").Run Join(Args), 0, True End If
Gọi chạy script thông qua lệnh cscript.exe
(Windows Script Host) cùng tham số //Nologo
để không hiện banner (tên, copyright và phiên bản của lệnh cscript) khi chạy.
cscript.exe //Nologo quietrun.vbs "C:\Batch Files\test.bat"
Sử dụng chp (Create Hidden Process)
CHP là một lệnh được viết bằng C++ sử dụng Win32 API là CreateProcess
để ẩn giấu GUI của các phần mềm chạy trên Windows.
Đây là hành vi tương tự một malware nên chp
bị Windows Defender đánh giá là một PUA:Win32/Presenoker dù mã nguồn đâu đó chỉ 80 dòng code và chẳng làm gì nên tội.
Bạn có thể tải chp.exe
và mã nguồn của nó tại http://www.commandline.co.uk/chp/. Lưu ý cấu hình Windows Defender cho phép phần mềm này chạy nhé (chọn Allow on device).
Để sử dụng chp gọi file BAT mà không hiện cửa sổ Command Prompt, ta gọi lệnh như sau:
chp.exe cmd.exe /c "C:\Batch Files\test.bat"
Sử dụng NirCmd
NirCmd có tham số exec hide
để mở application mà không hiện cửa sổ. Lệnh được thực hiện như sau:
nircmd.exe exec hide "C:\Batch Files\test.bat"
Sử dụng SilentCMD
SilentCMD chạy file BAT không hiện cửa sổ command prompt và có khả năng redirect đầu ra output vào file. Phần mềm này yêu cầu .NET Framework 3.5 được cài đặt.
Sử dụng SilentCMD như sau:
SilentCMD.exe "C:\Batch Files\test.bat"