มีความเป็นไปได้สองอย่าง
คุณลืมที่จะใส่%id%
ในjstack
การโทร
jstack %id% > jstack.txt
ดังนั้นไฟล์แบตช์ที่ถูกต้องทั้งหมดควรเป็น:
@echo off
set /p id=Enter ID:
echo %id%
jstack %id% > jstack.txt
และ / หรือ 2 คุณใส่ไว้ในรหัส (และลืมบอกเราในคำถาม) แต่เมื่อคุณรันไฟล์แบตช์คุณกดปุ่ม Enter แทนที่จะพิมพ์ ID (เช่น 1234)
สิ่งที่เกิดขึ้นคือผลลัพธ์ของข้อผิดพลาดสองข้อjstack
นี้:
ควรจะถูกเรียกด้วยรหัสที่คุณให้
แต่ในกรณีของคุณ (ตามรหัสที่คุณระบุในคำถาม) คุณเรียกมันว่าไม่มีตัวแปรใด ๆ คุณเขียน:
jstack > jstack.txt
ดังนั้นเมื่อคุณรันjstack
โดยไม่มีตัวแปรมันจะแสดงผลดังนี้:
Terminate batch file Y/N?
ความผิดพลาดที่สองของคุณคือการที่คุณกด Enter Enter ID:
แทนการให้ค่าเมื่อโปรแกรมถามคุณ: ถ้าคุณจะใส่รหัสในจุดนี้พูด 1234 %id%
ตัวแปรจะกลายเป็นค่านั้นในกรณีของเรา 1234 แต่คุณไม่ได้ให้ค่าและกด Enter แทน เมื่อคุณไม่ให้ค่าตัวแปรใด ๆ และหากตัวแปรนั้นไม่ได้ถูกตั้งค่าเป็นอย่างอื่นมาก่อนตัวแปร%id%
จะถูกตั้งค่าเป็นพรอมต์ของset
คำสั่ง !! ดังนั้นตอนนี้%id%
ถูกตั้งค่าEnter ID:
ที่ถูก echoed บนหน้าจอของคุณตามที่ร้องขอในแฟ้มแบตช์ก่อนที่คุณเรียกว่า jstack
แต่ฉันสงสัยว่าคุณมีรหัสjstack %id% > jstack.txt
ในแบทช์ไฟล์ของคุณด้วย%id
(และละเว้นโดยไม่ได้ตั้งใจจากคำถาม) และคุณกด Enter โดยไม่ต้องพิมพ์รหัส จากนั้นโปรแกรมแบตช์จะแสดง id ซึ่งตอนนี้คือ "Enter ID:" แล้วรันjstack Enter ID: > jstack.txt
Jstack ตัวเองสะท้อนอินพุตพบข้อผิดพลาดและขอให้ยุติ
และทั้งหมดนี้เขียนลงในไฟล์ jstack.txt