2011-11-18 38 views
5

Có ai đó biết cách thêm hành động được kích hoạt khi gọi tập tin thực thi của tôi với /? đối số? Tôi đã luôn sử dụng -h để hiển thị các tập quán, nhưng một lần tôi cần -h arg cho một thứ khác.Thêm /? chuyển đổi hàng loạt?

EDIT: Thực ra tôi đã cố gắng bằng cách phân tích các thuộc tính như thế này

for %%i in (%*) do .... 

Nhưng /? Đối số bị bỏ qua, tôi sẽ thử các giải pháp của bạn để xem có khác biệt không.

Btw, tại sao khi bạn phân tích cú pháp %% i/? args bị bỏ qua?

Trả lời

6

Các /? dường như được chỉ đơn giản là bỏ qua bởi các for %%i in (%*) nhưng đó là chức năng đại diện của cho vòng lặp, nó sẽ cố gắng để tìm một tập tin đó phù hợp với /? sẽ không thành công.

Bạn không thể sử dụng ? hoặc * trong vòng lặp "bình thường", mà không sửa đổi kết quả.

Bạn có thể sử dụng lệnh SHIFT để truy cập tất cả các thông số của mình.

:parameterLoop 
if "%~1"=="/?" call :help 
if "%~1"=="-h" call :help 
if "%~1"=="-o" call :other 
shift 
if not "%~1"=="" goto :parameterLoop 

Nếu bạn cũng muốn hiển thị tùy chọn đã chọn, bạn gặp sự cố với lệnh echo, vì điều này thường hiển thị trợ giúp thay vì /?.

Bạn có thể tránh điều này bằng cách sử dụng echo(%1 thay vì echo %1.

+0

+1 Tôi sẽ thêm công tắc '/ I' vào lệnh' IF'. –

+0

cảm ơn điều đó thật tuyệt :) – kitensei

3

Bạn kiểm tra đối số dòng lệnh của mình (% 1,% 2 vv) so với /? chuỗi và nếu đúng thì hãy in trợ giúp bằng lệnh ECHO. Ví dụ,

@ECHO OFF 
IF "%1"=="/?" (
    ECHO "Help Line 1" 
    ECHO "Help Line 2" 
) ELSE (
    ECHO "Do Your Action" 
) 
1

Bạn có thể thử này:

@echo off 
if "%1"=="/?" goto print_help 
goto normal_start 

:print_help 
echo Here is your help 
goto end 

:normal_start 
echo I'm working 

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