Il y a deux possibilités.
Vous avez oublié de mettre %id%
l' jstack
appel dans l' appel.
jstack %id% > jstack.txt
Le fichier de commandes correct devrait donc être:
@echo off
set /p id=Enter ID:
echo %id%
jstack %id% > jstack.txt
Et / Ou 2. Vous l'avez mis dans le code (et vous avez oublié de nous le dire dans la question) mais lorsque vous avez exécuté le fichier de commandes, vous avez appuyé sur la touche Entrée au lieu de taper un ID (par exemple 1234).
Ce qui se passe est le résultat de ces deux erreurs:
jstack
est censé être appelé avec l'identifiant que vous lui fournissez.
Mais dans votre cas (selon le code que vous avez fourni dans la question), vous l'avez appelé sans aucune variable. Tu as écrit:
jstack > jstack.txt
Ainsi, lorsque vous exécutez jstack
sans variable, il génère les éléments suivants:
Terminate batch file Y/N?
Votre deuxième erreur est que vous appuyez sur Entrée au lieu de donner une valeur lorsque le programme vous a demandé: Enter ID:
. Si vous aviez %id%
entré un ID à ce stade, par exemple 1234, la variable deviendrait cette valeur, dans notre cas 1234. Mais vous n'avez PAS fourni de valeur et vous avez plutôt appuyé sur Entrée. Lorsque vous ne donnez aucune valeur à la variable, et si cette variable n'a pas été définie sur autre chose auparavant, la variable %id%
est définie à l'invite de la set
commande !! Il %id%
est donc maintenant défini sur Enter ID:
lequel a été répercuté sur votre écran comme demandé dans le fichier de commandes AVANT d'appeler le jstack.
Mais je soupçonne que vous aviez le jstack %id% > jstack.txt
code de votre fichier de commandes avec le %id
(et l'avez omis par erreur de la question), et que vous appuyez sur Entrée sans taper un identifiant. Le programme par lots a ensuite fait écho à l'id, qui est maintenant "Enter ID:", puis a exécutéjstack Enter ID: > jstack.txt
Jstack lui-même a fait écho à l'entrée, a rencontré une erreur et a demandé de terminer.
Et tout cela a été écrit dans le fichier jstack.txt.