Cách ngăn tự động đóng bàn điều khiển sau khi thực hiện tệp bó


510

Tôi có thể đặt lệnh nào ở cuối tệp bó để ngăn tự động đóng bàn điều khiển sau khi thực hiện tệp?


5
Sẽ tốt hơn nếu có một cách để phát hiện nếu một tệp .cmd được bắt đầu bởi doubleclick trong trình thám hiểm (sau đó bạn muốn nó tạm dừng ở cuối) hoặc nếu nó được bắt đầu bởi một dòng lệnh đã mở. Trong trường hợp sau (và đặc biệt nếu được thực hiện bởi chương trình khác), bạn không muốn tạm dừng. Tôi chưa tìm thấy một giải pháp tốt cho trường hợp này (và thường sử dụng biến if% NOPAUSE%, nhưng điều này chỉ hoạt động cho các chương trình cha mẹ không dành cho shell paremt).
eckes

Câu trả lời:


635

Trong các tệp bó Windows / DOS:

pause

Điều này in một "Press any key to continue . . . "thông điệp tốt đẹp

Hoặc, nếu bạn không muốn "Press any key to continue . . ."tin nhắn, thay vào đó hãy thực hiện điều này:

pause >nul

14
Không có gợi ý nào ở đây hoạt động với tôi khi nhấp đúp vào tệp bat. Đó là một môi trường máy chủ (và tôi phải chạy tập lệnh trong đó), vì vậy họ có thể đã sửa đổi hành vi. Điều đó không thay đổi mục tiêu của tôi. Để giữ cho cửa sổ lệnh mở để tôi có thể thông báo lỗi.
Henrik Erlandsson

1
Vâng, điều này không phải lúc nào cũng hoạt động tùy thuộc vào môi trường. Đối với một giải pháp mạnh mẽ hơn xem câu trả lời của tôi dưới đây. Về cơ bản chỉ cần thực hiện set / p exitkey = "Nhấn phím bất kỳ để tiếp tục ..."
Steven Mark Ford

Hãy cẩn thận, nếu ai đó chạy tập lệnh của bạn mà không có cửa sổ giao diện điều khiển (ví dụ thông qua vbscript), thì nó sẽ bị treo cho đến khi bạn giết nó thông qua Trình quản lý tác vụ.
Andry

Nếu một cái gì đó giống như maven sử dụng CALL, stackoverflow.com/a/52205298/4485678
Kevin Roy

tạm dừng hoạt động hoàn hảo ở đây
Davidson Lima

141

Phụ thuộc vào câu hỏi chính xác!

Thông thường pausethực hiện công việc trong một tập tin .bat .

Nếu bạn muốn cmd.exe không đóng để có thể vẫn gõ, hãy sử dụng cmd /klệnh ở cuối tệp.


2
Nếu bạn đang chạy các lệnh Windows thông qua hộp thoại Run, cmd /kthay vào đó hãy đặt trước lệnh của bạn. & cmd /ksẽ không làm việc
Noumenon

68

Nếu bạn muốn cmd.exe không đóng và có thể tiếp tục nhập, hãy sử dụng cmd /k

Chỉ cần cảm thấy cần phải làm rõ những gì /k(từ trang web windows):

/k : Thực hiện lệnh được chỉ định bởi chuỗi và tiếp tục.

Vì vậy, cmd /kkhông có lệnh theo dõi ở cuối tập tin bat sẽ chỉ cmd.exemở cửa sổ để sử dụng tiếp.

Mặt khác, pauseở phần cuối của một tệp bó sẽ chỉ tạm dừng quá trình và chấm dứt cmd.exekhi nhấn nút đầu tiên


24

Cách dưới đây để có các lệnh trong một tệp bó sẽ mở các cửa sổ nhắc lệnh mới và các cửa sổ mới sẽ không tự động thoát.

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2

2
Trong trường hợp của tôi, tôi đã gặp một số lỗi trong khi chạy lệnh đầu cuối và do đó, các lệnh 'tạm dừng' và 'cmd / k' không giúp tôi dừng chương trình 'do lỗi. Ví dụ này đã giúp tôi hiển thị, tôi có lỗi và cũng dừng lại từ thiết bị đầu cuối. Cảm ơn!
HowDoYouTellForAChild

19

Nếu bạn đang sử dụng Maven và bạn muốn bỏ qua việc gõ và ngăn không cho giao diện điều khiển đóng lại để xem kết quả bạn cần sử dụng CALLlệnh trong tập lệnh, bên cạnh chỉ là 'mvn cài đặt sạch'.

Như thế này sẽ đóng giao diện điều khiển

ECHO This is the wrong exemple
mvn clean install
pause

Như thế này giao diện điều khiển sẽ vẫn mở

ECHO This is the right exemple
CALL mvn clean install
pause

Nếu bạn không sử dụng CALLlệnh thì cả hai mẫu quá khứ sẽ không hoạt động.


1
Cảm ơn rất nhiều! Nó ngăn lời nhắc đóng nếu lệnh thất bại.
Timur Gilauri

1
Nó làm việc cho tôi. Tôi muốn thực thi 2 lệnh differents trong 1 tập tin bat. nhưng lời nhắc của tôi đóng lại sau lệnh đầu tiên. Đặt call <myCommand>giải quyết vấn đề này: Lời nhắc của tôi đã dừng đóng sau lần thực hiện đầu tiên
Zombkey

1
Câu trả lời hữu ích nhất
gianmarcocalbi

14

Thêm cmd.exedưới dạng một dòng mới bên dưới mã bạn muốn thực thi:

c:\Python27\python D:\code\simple_http_server.py

cmd.exe

Đây chính xác là những gì tôi đang tìm kiếm, cảm ơn! "Tạm dừng" sẽ không hoạt động khi tập lệnh python của bạn bị hỏng. Những gì tôi muốn là để xem một thông báo lỗi. Cho đến bây giờ tôi phải chạy các kịch bản python của mình thông qua bảng điều khiển
user70960

Nhưng điều này hoạt động tốt:python script.py %1 && cmd
user70960

Cảm ơn bạn! Điều này đã giúp! Tôi đã tạo một tệp bó để chạy các ứng dụng python.
fez.tival

10

cách của tôi là viết một lô thực tế (nói "foo.bat") để hoàn thành công việc; sau đó tạo một "start.bat" khác:

@echo off
cmd /k foo.bat

Tôi thấy điều này cực kỳ hữu ích khi tôi thiết lập các biến môi trường một lần.


1
Bạn chỉ có thể đặt cmd /k(không có bất kỳ lệnh nào) vào cuối foo.battệp và chạy nó. Bạn không cần một start.battập tin riêng biệt .
ADTC


5

bên cạnh pause.

set /p=

có thể được sử dụng. Nó sẽ mong đợi đầu vào của người dùng và sẽ giải phóng luồng khi nhấn enter.

hoặc là

runas /user:# "" >nul 2>&1

sẽ làm tương tự ngoại trừ không có gì từ đầu vào của người dùng sẽ được hiển thị và cũng sẽ không còn trong lịch sử lệnh.


3

Khả năng 1: Chỉ cần tạo 2 tệp .bat và ghi vào tệp đầu tiên:

start <filename> // name of 2nd batch file
exit

Batch file 2 là tập tin cuối cùng sẽ không đóng. Vì vậy, bây giờ khi bạn mở đợt nr.1 Nó sẽ bắt đầu lần thứ 2 và chính nó. Khi kết thúc thứ 2, nó sẽ không đóng hoàn toàn (miễn là bạn không đặt lối ra ở cuối)

Khả năng 2: Batch file 1:

call <filename>
cls
echo End of file
pause
<any code you want>

Khi tệp thứ 2 kết thúc thì nó sẽ tiến hành tệp 1 lần nữa và xuất phần còn lại của nó. Với điều đó, bạn thậm chí có thể làm cho xử lý lỗi. Nếu nr.1 gặp sự cố, nó sẽ đi vào nr.2 và hiển thị nó


2

Hack nhỏ này yêu cầu người dùng nhập khóa và lưu nó vào biến% exitkey% (biến này có thể được gọi là bất cứ thứ gì bạn thích mặc dù).

set /p exitkey= "Press any key to continue..."

NB: khoảng trắng sau dấu '=' là rất quan trọng



2

Tôi biết tôi đến muộn nhưng cách ưa thích của tôi là:

:programend
pause>nul
GOTO programend

Theo cách này, người dùng không thể thoát bằng cách sử dụng enter.


Tôi nghĩ là có, vì đó là một cách nâng cao để ngăn chặn giao diện điều khiển đóng cửa. Ngay cả khi người dùng nhấn một phím, giao diện điều khiển vẫn mở. Người dùng sẽ buộc phải thoát chỉ bằng cách đóng cửa sổ giao diện điều khiển.
decadenza

2

Có vấn đề với câu trả lời ở đây, vì vậy tôi đã đưa ra câu hỏi này, nó hoạt động với tôi (TM):

cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause

1

Có hai cách để làm điều đó tùy thuộc vào trường hợp sử dụng

1) Nếu bạn muốn dấu nhắc cmd của Windows luôn mở để bạn có thể thấy kết quả thực hiện và đóng nó sau đó; sử dụng

pause

2) nếu bạn muốn dấu nhắc cmd của Windows luôn mở và cho phép bạn thực hiện một số lời bạt; sử dụng

cmd

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


1

Dễ thôi, thêm cmd vào dòng dơi cuối cùng của bạn, NHƯNG! nếu bạn đặt lại hoặc xóa đường dẫn hệ thống của mình, bạn phải bắt đầu cmd của mình với đường dẫn đầy đủ, như:

%windir%\system32\cmd.exe

Ví dụ: tôi có một tập tin bat để đặt lại jdk về phiên bản cũ như thế này:

PATH=C:\Program Files\Java\jdk1.6.0_45\bin;C:\apache-ant-1.7.1\bin
SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45
%windir%\system32\cmd.exe

Vì tôi đặt lại đường dẫn hệ thống, tôi phải chạy cmd với đường dẫn đầy đủ hoặc hệ thống không thể tìm thấy cmd.exe, nó sẽ không chạy được cmd và chỉ đóng cửa sổ và bạn không thể thấy thông báo lỗi .

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.