2011-07-22 31 views
8

Dòng cuối cùng trong tệp lô của tôi là pause. Có cách nào để thêm một điều kiện nếu để xem nếu kịch bản được chạy trong dấu nhắc lệnh hoặc bằng cách nhấp đúp để thực hiện? Tôi muốn bỏ qua tạm dừng nếu nó đang chạy trong dấu nhắc lệnh.Tệp hàng loạt để xác định xem có sử dụng Dấu nhắc Lệnh

... 
... 
if not RUN_IN_COMMAND_PROMPT (
    pause 
) 

EDIT: Hy vọng tìm được giải pháp hoạt động trong Windows Server 2003/2008, WinXP, Win7.

Trả lời

6
CALL :GETMYSWITCH %CMDCMDLINE% 
IF /I "%MYSWITCH%" == "/C" ECHO I WAS STARTED IN THE EXPLORER & PAUSE 
IF /I NOT "%MYSWITCH%" == "/C" ECHO I WAS STARTED IN A DOS SESSION 


:GETMYSWITCH 
SET MYSWITCH=%2 
0

Sử dụng lệnh tty.

Sử dụng tùy chọn -s và kiểm tra giá trị trả lại.

1

Theo định nghĩa, tập lệnh trình bao sẽ luôn chạy trong "lời nhắc lệnh". Nhưng hãy thử sử dụng SESSIONNAME env var - dường như KHÔNG có mặt nếu tập lệnh được bắt đầu bằng cách nhấp đúp thay vì chạy theo cách thủ công từ lời nhắc.

+0

Được thử nghiệm trong Win7, cả hai (nhấp đúp, dấu nhắc) đều có% SESSIONNAME% giá trị "Bảng điều khiển". – Stan

+0

Không hiệu quả với tôi. 'SESSIONNAME' luôn chứa' Console' bất kể cách tôi bắt đầu tệp batch (sử dụng Windows XP) như thế nào –

+0

Rất tiếc, trên Win7 64bit, sessionname chỉ xuất hiện khi tôi chạy tập lệnh từ dấu nhắc trực tiếp. –

1

Tôi biết đây là một năm sau đó nhưng đối với tương lai người ta tìm kiếm, bạn có thể sử dụng

If /I "%COMSPEC%" == %CMDCMDLINE% Goto SkipPause 
pause 
:SkipPause 

Nó sẽ bỏ qua khối tạm dừng.

Các vấn đề liên quan