Làm cách nào để tạo tệp Windows Batch không hiển thị Dấu nhắc Lệnh khi được thực thi? [bản sao]


58

Tôi đã cài đặt một viên ngọc ruby ​​tên là Redcar, được khởi chạy từ dòng lệnh. Khi nó chạy, nó đánh cắp shell cho đến khi nó kết thúc, vì vậy tôi phải tạo một cửa sổ shell mới để tiếp tục thực hiện công việc dòng lệnh. Shell tôi đang sử dụng là shell GITBash từ MySysGit.

Tôi đã tìm thấy một tệp Redcar.bat có nghĩa là để khởi chạy Redcar như một phím tắt, tôi đoán vậy, nhưng tôi không muốn cửa sổ nhắc lệnh thêm mở ra bất cứ khi nào tôi khởi chạy tệp BAT.

Làm thế nào để tôi chỉ chạy BAT mà không thấy dấu nhắc?


1
Ước gì tôi biết câu trả lời cho +1 này cho một câu hỏi hay.
Supercereal

@Kyle một câu hỏi tương tự đã được đặt ra trước superuser.com/questions/191149/how-to-execute-cmd-exe-silently đề cập đến HSTART và đề cập ngắn gọn rằng một tệp VBS cũng có thể khởi chạy nó
barlop

Bạn có thể cập nhật câu trả lời đã chọn của bạn? Có thể và rất đơn giản khi bạn biết cách .. tệp bó: dòng 1: set var1=hello.txtdòng 2:start "test" notepad.exe "%~dp0%var1%"
Kody Brown

Đơn giản chỉ cần sử dụng ::hoặc @REM. Nguồn: superuser.com/a/843754/101936
PHP

Câu trả lời:


38

Bạn không thể - thực thi một tệp bó với Command Prompt tích hợp sẽ giữ cho một cửa sổ mở cho đến khi tệp bó thoát ra.

Những gì bạn có thể làm là thực hiện các bước để đảm bảo rằng tệp bó thoát ra càng nhanh càng tốt. Nếu có thể, sửa đổi tệp bó để chạy bất kỳ chương trình nào với startlệnh. Theo mặc định, starttrả về ngay lập tức mà không cần đợi chương trình thoát, vì vậy tệp bó sẽ tiếp tục chạy và có lẽ là thoát ngay lập tức. Kết hợp với việc sửa đổi lối tắt của bạn để chạy tệp bó được thu nhỏ và bạn sẽ chỉ thấy thanh tác vụ nhấp nháy mà không nhìn thấy cửa sổ trên màn hình.

Một lưu ý cho điều này là nếu bạn đang chạy một chương trình ở chế độ bảng điều khiển, có nhiều trình thông dịch kịch bản, thì tệp bó sẽ chờ chương trình thoát ra và sử dụng startsẽ tạo ra một cửa sổ giao diện điều khiển mới. Những gì bạn cần làm trong trường hợp này là chạy phiên bản trình thông dịch dựa trên Windows thay vì phiên bản dựa trên bảng điều khiển - không startcần thiết. Đối với Perl, bạn sẽ chạy wperl.exethay vì perl.exe. Đối với Python, nó pythonw.exethay vì python.exe. Bản phân phối win32 Ruby cũ mà tôi đã tải xuống rubyw.exe, cần phải làm điều tương tự.

Khả năng cuối cùng là sử dụng công cụ của bên thứ 3 để chạy dấu nhắc lệnh với cửa sổ ẩn. Tôi đã nghe nói về những điều như vậy nhưng chưa bao giờ sử dụng chúng, vì vậy tôi không biết bất cứ điều gì cụ thể để chỉ cho bạn.


Cảm ơn đã trả lời câu hỏi của tôi. Điều thực sự khó chịu không phải là cửa sổ nhắc nhở xuất hiện mà là nó phải mở miễn là chương trình đang chạy. Bây giờ đèn flash hoàn toàn có thể chịu được, và gần như không gây phiền nhiễu. Sẽ kiểm tra xem tôi có thể sửa đổi tập lệnh để chạy rubyw thay vì ruby ​​không.
Jake

1
Rất cảm ơn bạn đã giải thích sự khác biệt giữa "python" bất kỳ "pythonw" nào - cuối cùng tôi đã tìm thấy giải pháp để chạy các công cụ cửa sổ python mà chúng ta có mà không có dấu nhắc lệnh trong nền.
FP

´jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
redbeam_

Bạn có thể - chỉ không trong mã hàng loạt. thực sự có một số Q trên đây với cách ẩn dấu nhắc lệnh superuser.com/questions/62525/ siêu superuser.com/questions/191149/how-to-execute-cmd-exe-silently
barlop

21

Tôi nghĩ rằng đây là giải pháp đơn giản và ngắn nhất để chạy tệp bó mà không mở cửa sổ DOS, nó có thể gây mất tập trung khi bạn muốn lên lịch cho một tập lệnh để chạy định kỳ, vì vậy cửa sổ DOS tiếp tục bật lên, đây là giải pháp của bạn . Sử dụng VB Script để gọi tệp bó ...

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0 
Set WshShell = Nothing 

Sao chép các dòng trên vào một trình soạn thảo và lưu tệp với phần mở rộng .VBS. Chỉnh sửa tên tệp .BAT và đường dẫn phù hợp. Sau đó, chỉ cần chạy tệp .vbs và điều kỳ diệu xảy ra!


8

Bạn có thể chạy một tệp bó khác với START / MIN CMD.EXE / C mybatchfile.bat từ trong dấu nhắc lệnh.

Từ bên ngoài nó sẽ mang đến cửa sổ giao diện điều khiển cmd nhưng để tránh điều đó, bạn có thể tạo một tệp lối tắt với các thuộc tính được sửa đổi để bắt đầu thu nhỏ .


2
Trong Windows 8.1, tùy chọn này nằm trong Thuộc tính -> tab Phím tắt -> Chạy: -> Thu nhỏ (mặc định là "Cửa sổ bình thường")
pix

5

Để thực hiện việc này, hãy sử dụng chương trình Bat To exe Converter để chuyển đổi tệp bó của bạn thành tệp thực thi.

Khi chuyển đổi thành tệp thực thi, bạn sẽ tìm thấy một tùy chọn để chạy tệp của mình dưới dạng một ứng dụng Vô hình trong phần hiển thị. Vì vậy, khi bạn chạy nó, nó sẽ chạy mà không có cửa sổ.

Bát để exe


Trang web yêu cầu máy tính của bạn "giải quyết" mã hóa captcha. Đây là chương trình nofile.io/f/q4o8dauVQ4P/Bat_To_Exe_Converter.zip
rluks

4

Tiếp tục với câu trả lời của Dennis Williamson, bạn có thể chỉnh sửa tệp bó và nối thêm (trả trước) START /Bvào lệnh bạn đang thực thi.

Ví dụ: tôi có một tệp bó chạy putty và có cùng một vấn đề (thêm CMD), vì vậy đây là cách tôi viết nó:

@ECHO TẮT
START / B putty.exe -Load name_of_my_config_file

Nó hoạt động hoàn hảo.


4

Hãy thử xem:

START /B batchfile

ghi chú được thêm bởi barlop

khởi đầu /? nói về / B

 B           Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application.

3
Điều đó có thể hoạt động nếu tôi có một dấu nhắc lệnh mở, nhưng khi tôi đang sử dụng .bat tôi đang nhấp đúp vào nó hoặc một phím tắt đến nó trên máy tính để bàn của tôi. Tôi đang cố gắng tránh phải có một dấu nhắc lệnh để khởi chạy chương trình này.
Jake

3

Tôi không rõ vấn đề của bạn, nhưng với một số tệp bó của tôi, tôi sử dụng "mục đích" duy nhất là mục đích duy nhất là khởi chạy tệp bó chính.

Vì vậy, GO.BAT sẽ có:

cmd /c go2.bat %1 %2 %3
exit

Lối ra đóng cửa sổ nhắc lệnh sẽ vẫn mở.

Và GO2.BAT sẽ có nội dung tập tin thực sự hàng loạt mà tôi muốn.

  @echo off
  set userid=

  if NOT [%1]==[] goto userid:
  set /p userid=Enter USERID:  
  goto set_usr:

 :userid
 set userid=%1
 shift

 :set_usr
 if %userid%==steven goto steven:
 ...


1

Nếu bạn vẫn quan tâm đến việc không hiển thị cửa sổ giao diện điều khiển, đây là một giải pháp từ stackoverflow phù hợp với tôi (trong trường hợp của tôi, tôi đã không đưa bất cứ thứ gì vào sổ đăng ký, nhưng ở nơi tôi cần).


0

Chỉ cần đặt công tắc / b trước đường dẫn. Nó sẽ không mở dấu nhắc lệnh thứ hai.


0

Câu trả lời của Indago là giải pháp tốt nhất cho tôi cho đến nay. Tệp VBS cho phép tôi chạy chức năng của lô thông qua tập lệnh, ngăn chặn cửa sổ CMD xảy ra ở vị trí đầu tiên. Có một vài cảnh báo mặc dù:

  1. Nếu lô của bạn yêu cầu quyền quản trị, hãy tạo hoặc sử dụng lô hiện có gọi VBS và chạy lô đó với tư cách Quản trị viên.

  2. Không có độ nhớt, có thể khó nhận ra nếu những gì bạn đang cố gắng thực sự chạy theo cách bạn muốn.

Như đã nói, trước tiên tôi nên đặt thử nghiệm thiết lập / đơn vị giả để đảm bảo nó hoạt động chính xác theo cách bạn muốn, trước khi tích hợp nó.


0

Tôi đã sử dụng cmdow trong quá khứ và dường như nó đã hoạt động cho những gì tôi muốn.

Bạn có thể muốn sử dụng một trong các tùy chọn sau: CMDOW [window] /HID

/HID ẩn cửa sổ được chỉ định

CMDOW [window] /END

/END đóng cửa sổ chỉ định

CMDOW [window] /CLS

/CLS lịch sự yêu cầu đóng cửa sổ (một số cửa sổ có thể mở hộp thoại)

Hi vọng điêu nay co ich.


-5

Chỉ cần tạo một lối tắt đến tệp bó, nhấp chuột phải vào tệp, nhấp vào Properties, chuyển đến Generaltab, chọn hộp được gọi Hidden, nhấp vào Applyvà sau đó bật OK.
Bây giờ khi bạn mở lối tắt, nó sẽ chạy tệp bó.


Điều này là sai, vì nó chỉ ẩn tệp phím tắt / lô trong khi những gì người dùng muốn là một tệp bó để chạy vô hình.
Đừng root ở đây ...
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.