Làm thế nào để chạy một tập tin bó mà không khởi chạy một cửa sổ lệnh nghén? [bản sao]


131

Câu hỏi này đã có câu trả lời ở đây:

Trên Windows XP, tôi có thể chạy tệp bó (.bat hoặc .cmd) qua phím tắt mà không có "cửa sổ đen" không?


6
Bạn đang hỏi liệu bạn có thể ngăn cửa sổ lệnh hiển thị khi bạn chạy một tập tin bat không?
Eric

6
Có, bạn có thể dễ dàng thay đổi màu mặc định của cửa sổ đầu ra bằng cách sử dụng Thuộc tính trên phím tắt cmd.exe. (vâng, đây chỉ là một trò đùa ...)
Toby J

Câu trả lời:


86

Lưu ví dụ dưới dạng wscript, ví dụ, hidecmd.vbs sau khi thay thế "tests.bat" bằng tên tệp bó của bạn.

Set oShell = CreateObject ("Wscript.Shell") 
Dim strArgs
strArgs = "cmd /c testing.bat"
oShell.Run strArgs, 0, false

Tham số thứ hai của oShell.RunintWindowStylegiá trị biểu thị sự xuất hiện của cửa sổ chương trình và giá trị 0 dành cho cửa sổ ẩn.

Tham khảo ở đây http://msdn.microsoft.com/en-us/l Library / d5fk67ky.aspx


Dòng thứ ba sẽ là: strArss = "cmd / c FILEPATH \ tests.bat"?
Dan Z

1
Bất kỳ cách nào để chạy dơi trong chế độ nâng cao trong khi vẫn còn vô hình?
Laurens Swart

Làm thế nào để chạy .battập tin như quản trị viên bằng phương pháp này?
Mehdi Dehghani

44

Đây chỉ là một sự đơn giản hóa câu trả lời của Shaji. Bạn có thể chạy tập lệnh bó của mình thông qua tập lệnh VBScript (.vbs) như thế này:

'HideBat.vbs
CreateObject("Wscript.Shell").Run "your_batch_file.bat", 0, True

Điều này sẽ thực thi tệp bó của bạn mà không có cửa sổ lệnh được hiển thị.


Làm thế nào để chạy .battập tin như quản trị viên bằng phương pháp này?
Mehdi Dehghani

Thuộc tính @MehdiDehghani> bảo mật> chạy với tư cách quản trị viên. Nếu điều đó chỉ hoạt động cho exe hoặc ứng dụng, thì oh giếng.
TaylorS

21

Chỉ cần mở rộng câu trả lời "Sử dụng Windows Scripting" (mà tôi cho là tốt nhất vì đã tích hợp sẵn) đây là cách thực hiện bằng cách sử dụng một tập lệnh bao bọc duy nhất và chuyển tên của tệp bó "thực" làm tham số. Các tham số bổ sung sẽ được chuyển vào tệp bó.

If WScript.Arguments.Count >= 1 Then
    ReDim arr(WScript.Arguments.Count-1)
    For i = 0 To WScript.Arguments.Count-1
        Arg = WScript.Arguments(i)
        If InStr(Arg, " ") > 0 Then Arg = """" & Arg & """"
      arr(i) = Arg
    Next

    RunCmd = Join(arr)
    CreateObject("Wscript.Shell").Run RunCmd, 0, True
End If

Vì vậy, ví dụ lưu tập tin trên như NoShell.vbsmột nơi nào đó sau đó gọi:

NoShell.vbs c:\foo\my_batch_file.bat

Cuối cùng, nếu bạn đang tìm cách chạy tệp này từ một nơi không hiểu tệp .vbs (chẳng hạn như "Công cụ bên ngoài" trong Visual Studio), bạn sẽ muốn gọi C:\Windows\System32\wscript.exevới tệp vbs làm tham số đầu tiên và của bạn tập tin hàng loạt như là thứ hai.


6
Đối với những người không thích ý tưởng & khái niệm phải tạo một tệp vbs mới cho mỗi tệp bat mới mà người ta tạo, vì người ta phải sử dụng một trong hai câu trả lời hàng đầu, đây là giải pháp hoàn hảo. Thay vì nhiều tệp vbs, bạn sẽ có nhiều phím tắt. Đối với mỗi tệp dơi mới, hãy tạo một lối tắt của tệp vbs, nhấp chuột phải vào tệp đó, chọn thuộc tính> tab Phím tắt và trong hộp Mục tiêu nhập đường dẫn của tệp dơi sau đường dẫn đã có, giống như hiển thị ở trên hoặc như Điều này nếu phím tắt không ở cùng một nơi với tệp vbs : "C:\My Files\HideCmd.vbs" c:\foo\my_batch_file.bat.
Rolo

Nếu đường dẫn tệp của tệp bat có một khoảng trắng, làm thế nào nó có thể được gọi thông qua một phím tắt đến tệp vbs? Ví dụ : "C:\My Files\HideCmd.vbs" c:\my things\my_batch_file.bat. Bất kể điều gì tôi cố gắng cho đường dẫn - trích dẫn kép xung quanh tất cả,% 20 thay cho không gian hoặc kết hợp cả hai, không có gì hoạt động. Tôi nhận được một thông báo lỗi cho tôi biết rằng tập tin không thể được tìm thấy hoặc không có gì xảy ra. Đây có phải là do lỗi người dùng của tôi không, giới hạn của Windows với trường Target cho các phím tắt hoặc sự cố với tập lệnh vbs trong đó nó không xử lý đúng đường dẫn tệp với khoảng trắng?
Rolo

@Rolo Tôi đã cập nhật tập lệnh để nếu bất kỳ tham số đến nào có khoảng trắng, nó sẽ bao quanh chúng bằng dấu ngoặc kép. Vì vậy, bạn sẽ muốn bọc đường dẫn đến tệp bó bằng dấu ngoặc kép khi gọi nó, sau đó nó sẽ được coi là một đối số duy nhất và bọc lại trước khi được gọi.
Toby J

9

Bạn có thể thay đổi các thuộc tính của phím tắt để chạy thu nhỏ.

Để chạy nó hoàn toàn vô hình, bạn sẽ cần một cái gì đó khác, như Windows Scripting.


1
Đề nghị đầu tiên của bạn là cách tôi luôn thực hiện nó.
martineau

8

Sử dụng bắt đầu với tùy chọn '/ B'. Ví dụ:

@echo off
start /B go.bat

25
start /bsẽ chỉ chạy chương trình trong bảng điều khiển hiện được phân bổ thay vì sinh ra một chương trình mới. Dù sao bạn cũng sẽ nhận được một cái mới vì lô phải chạy với cmd (lần lượt [ngạc nhiên], mở giao diện điều khiển).
Joey

@Joey có, nhưng điều này rất hữu ích để khởi chạy các tệp bó từ các ứng dụng khác thông qua thực thi shell (như SYSTEMtrong C / C ++).
Tomáš Zato

1
@ TomášZato: Bạn chỉ có thể gọi trực tiếp tệp bó trong trường hợp đó, hoặc, nếu bất cứ điều gì bạn sử dụng để sinh ra một quy trình không tạo vỏ trước, hãy sử dụng cmd /c foo.cmd. Hoàn toàn không cần sử dụng starttrong các tình huống đó, và, tôi cho rằng systemkhông nên sử dụng theo hướng có lợi CreateProcess. Bằng cách khởi chạy một tệp bó, bạn đã phụ thuộc vào một nền tảng, bạn cũng có thể sử dụng các công cụ tốt hơn cho công việc.
Joey

@Joey Cảm ơn rất nhiều, chưa bao giờ nghe nói cmd /ctrước đây. Lệnh cmd là những gì tôi cần trong trường hợp của mình, nhưng tất cả các câu trả lời stackexchange tôi tìm thấy cho đến nay, về một tệp bó chạy một tệp bó khác, có câu trả lời hàng đầu để sử dụng bắt đầu ...
T_D

start /b go.bat sẽ không phân bổ bảng điều khiển mới (ví dụ: conhost.exe - hoặc một chuỗi trong csrss.exe trước Windows 7). Tuy nhiên, nó sẽ tạo ra một mớ hỗn độn vì tập lệnh bó được chạy với một phiên bản mới của cmd.exe được gắn vào cùng một bàn điều khiển . Cả hai phiên bản của shell sẽ cạnh tranh để đọc đầu vào từ bàn điều khiển, thường là xen kẽ. Nó cần /w(ví dụ start /b /w go.bat) để chờ trong trường hợp thứ hai, tương tự như sử dụng cmd /cnếu sử dụng system. Ngoài ra, nếu bạn đang gọi CreateProcess, hãy chạy go.battrực tiếp. Không cần cmd /c.
Eryk CN

6

Mã nguồn mở GPL miễn phí "Tạo quy trình ẩn"

http://www.commandline.co.uk/chp/

Microsoft Security Essentials và có lẽ hầu hết các trình quét vi-rút / phần mềm độc hại khác sẽ coi chương trình thực thi, chp.exe, là vi-rút vì nó ẩn bất kỳ chương trình nào bạn chỉ định hiển thị cửa sổ hoặc nút thanh tác vụ, giống như vi-rút.

Nó không phải là virus. Nó không che giấu quá trình mục tiêu xuất hiện trong trình quản lý tác vụ chẳng hạn. Và tất nhiên, mã nguồn được bao gồm để bạn có thể thấy rằng nó rất nhỏ và không làm gì ngoài việc chạy bất kỳ chương trình nào bạn cung cấp.

Bạn thậm chí không cần phải tin rằng chp.exe đi kèm thực sự được xây dựng từ nguồn đó. Bạn có thể tiếp tục và loại bỏ chp.exe đi kèm và tự biên dịch từ nguồn và tất cả các công cụ cần thiết để làm như vậy thậm chí là miễn phí và có thể tải xuống.


Bạn cũng có thể chỉ cần tạo một lối tắt đến tệp .bat hoặc .cmd, sau đó nhấp chuột phải vào phím tắt, Thuộc tính, tab Phím tắt, Chạy: Thu nhỏ. Sau đó, trong các tác vụ theo lịch trình, sử dụng phím tắt thay vì tệp .bat / .cmd trực tiếp. Điều đó sẽ ngăn cửa sổ bật lên, nhưng nút thanh tác vụ vẫn sẽ xuất hiện.


6

Bạn có thể sử dụng kịch bản cửa sổ như AutoIt .

Ví dụ, chỉ cần viết nó cho trình soạn thảo kịch bản AutoIt. Nó khá đơn giản

Run("C:\test\batchfile.bat", "", @SW_HIDE)

Nếu bạn muốn chạy nó trong một vòng lặp,

$x=0
Do
 Run("C:\test\batchfile.bat", "", @SW_HIDE)
 Sleep(5000)
Until $x = 1

Biên dịch nó dưới dạng .exe - và bạn đã hoàn thành.


Tương tự như vậy, trong AutoHotkey :

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 

5

Sử dụng Bắt đầu ẩn (chi phí $ 20)

Hidden Start - Chạy các ứng dụng và tập tin hàng loạt mà không có cửa sổ Console hoặc UAC Prompt

Các ứng dụng bảng điều khiển và các tệp bó thường được chạy khi khởi động Windows hoặc theo lịch. Sự bất tiện chính của điều này là mỗi ứng dụng mở một cửa sổ giao diện điều khiển nhấp nháy trên màn hình. Hidden Start (hoặc Hstart) là một tiện ích dòng lệnh nhẹ cho phép bạn chạy các ứng dụng bảng điều khiển và các tệp bó mà không có bất kỳ cửa sổ nào trong nền, xử lý độ cao đặc quyền UAC trong Windows 7 và Vista, bắt đầu nhiều lệnh song song hoặc đồng bộ, và nhiều hơn nữa .

nhập mô tả hình ảnh ở đây


Đây là một ứng dụng được thiết kế rất độc đáo và hữu ích.
Đạo sư Josh

5

Giải pháp đơn giản, không sử dụng bất kỳ chương trình bổ sung.

  1. Tạo tập tin bó bạn muốn thực hiện và kiểm tra nó.
  2. Tạo một lối tắt cho nó.
  3. Chỉnh sửa các thuộc tính của phím tắt: trong tab Shortcut, chọn Run Minimized. Gán một phím nóng cho nó và bạn đã hoàn tất!

Chúc may mắn!


7
Đây không phải là một giải pháp cho vấn đề của OP. Có sự khác biệt giữa Giảm thiểuẨn
nixda

Nếu bạn thay đổi phím tắt để sử dụng biểu tượng bên phải, phần thu nhỏ được thu nhỏ trên thanh tác vụ thực sự là một lời nhắc tốt đẹp đang bắt đầu.
Bất cứ ai

Đó là một giải pháp tốt đẹp và sạch sẽ cho vấn đề của tôi ! Cảm ơn bạn!
dmitry_romanov

giảm thiểu ... hehe.
gumuruh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.