Có hai khả năng.
Bạn đã quên đặt những %id%
trong jstack
cuộc gọi.
jstack %id% > jstack.txt
Vì vậy, toàn bộ tập tin lô chính xác phải là:
@echo off
set /p id=Enter ID:
echo %id%
jstack %id% > jstack.txt
Và / Hoặc 2. Bạn đã đặt mã vào mã (và quên cho chúng tôi biết trong câu hỏi) nhưng khi bạn chạy tệp bó, bạn nhấn phím Enter thay vì nhập ID (giả sử 1234).
Điều gì đang xảy ra là kết quả của hai sai lầm này:
jstack
được cho là được gọi với id mà bạn cung cấp.
Nhưng trong trường hợp của bạn (theo mã bạn cung cấp trong câu hỏi) bạn đã gọi nó mà không có bất kỳ biến nào. Bạn đã viết:
jstack > jstack.txt
Vì vậy, khi bạn chạy jstack
không có biến, nó xuất ra như sau:
Terminate batch file Y/N?
Lỗi thứ hai của bạn là bạn đã nhấn Enter thay vì đưa ra một giá trị khi chương trình hỏi bạn : Enter ID:
. Nếu bạn đã đặt ID vào thời điểm này, giả sử 1234, %id%
biến sẽ trở thành giá trị đó, trong trường hợp của chúng tôi là 1234. Nhưng bạn KHÔNG cung cấp giá trị và thay vào đó nhấn Enter. Khi bạn không cung cấp cho biến bất kỳ giá trị nào và nếu biến đó không được đặt thành bất kỳ giá trị nào khác trước đó, thì biến đó %id%
được đặt thành dấu nhắc của set
lệnh !! Vì vậy, bây giờ %id%
được đặt thành tiếng Enter ID:
vang trên màn hình của bạn như được yêu cầu trong tệp bó TRƯỚC KHI bạn gọi là jstack.
Nhưng tôi nghi ngờ bạn DID có jstack %id% > jstack.txt
mã tệp trong lô của bạn với %id
(và bỏ qua nó do nhầm lẫn với câu hỏi) và rằng bạn nhấn enter mà không cần nhập id. Chương trình bó sau đó lặp lại id, hiện là "Enter ID:", rồi chạyjstack Enter ID: > jstack.txt
Jstack tự lặp lại đầu vào, gặp lỗi và yêu cầu chấm dứt.
Và tất cả điều này đã được ghi vào tệp jstack.txt.