Comment ouvrir l'invite de commande et insérer des commandes à l'aide de Java?
Est-il possible d'ouvrir l'invite de commande (et je suppose que tout autre terminal pour les autres systèmes), et exécuter des commandes dans la fenêtre nouvellement ouverte?
Actuellement ce que j'ai est: est-ce
Runtime rt = Runtime.getRuntime();
rt.exec(new String[]{"cmd.exe","/c","start"});
J'ai essayé d'ajouter la commande suivante après le "départ", j'ai essayé de lancer un autre rt.exec contenant mon commandement, mais je ne peux pas trouver un moyen de le faire fonctionner.
Si il le faut, je suis en train d'exécuter une commande similaire à ceci:
java -flag -flag -cp terminal-based-program.jar
MODIFIER Malheureusement j'ai eu d'étranges résultats. J'ai réussi à lancer l'invite de commande et passer une commande en utilisant ce:
rt.exec("cmd.exe /c start command");
Cependant, il semble que le travail avec une seule commande. Parce que, si j'essaie d'utiliser la commande séparateur comme ça "cmd.exe /c commande start&commande2", la deuxième commande est passée par le fond (la façon dont il le ferait si j'ai juste utilisé la rt.exec("command2");). Maintenant, le problème ici est, j'ai réalisé que j'ai besoin de changer le répertoire de l'invite de commande est en cours d'exécution, parce que si je viens d'utiliser le chemin complet vers le fichier jar, jar fichier incorrecte lit les données à partir de l'invite de commande de l'active directory, pas le jar du répertoire qui contient ses ressources.
- Pourriez-vous préciser pourquoi vous essayez de faire cela plutôt que de simplement en cours d'exécution .exec sur la commande java. La fenêtre de commande apparaîtra automatiquement.
- Voir le commentaire que j'ai mis sur ktm5124 de réponse.
Vous devez vous connecter pour publier un commentaire.
Je sais que les gens vous recommandons de rester à l'écart de la rt.exec(String), mais cela fonctionne, et je ne sais pas comment le changer dans le tableau version.
cmd /?
/C Carries out the command specified by string and then terminates /K Carries out the command specified by string but remains
Si vous exécutez les deux commandes à la fois juste à changer le répertoire de l'invite de commande s'exécute, il y a une surcharge pour le moteur d'Exécution.méthode exec qui vous permet de spécifier le répertoire de travail courant. Comme,
Cela va ouvrir l'invite de commande dans le répertoire à newDir. Je pense que votre solution fonctionne aussi bien, mais cela garantit que votre commande de chaîne ou un tableau un peu plus propre.
Il y a une surcharge pour avoir la commande comme une chaîne de caractères et avoir la commande comme un tableau de chaînes.
Vous pouvez trouver encore plus facile, cependant, d'utiliser le ProcessBuilder, qui a un
directory
méthode pour définir le répertoire de travail courant.Espère que cette aide.
La suivante fonctionne pour moi sur Snow Leopard:
Chose est, si vous voulez lire la sortie de cette commande, vous devez lire le flux d'entrée du processus. Par exemple,
Vous permet de lire la ligne-par-ligne de sortie de la commande assez facilement.
Le problème est peut-être aussi que MS-DOS n'a pas l'interpréter l'ordre des arguments pour dire "commencer une nouvelle invite de commande". Votre tableau doit probablement être:
{"démarrer", "cmd.exe", "\c"}
Pour ouvrir les commandes de la nouvelle invite de commande, vous devez utiliser le Processus de référence. Mais je ne suis pas sûr de savoir pourquoi vous voulez le faire que lorsque vous pouvez simplement utiliser exec, que la personne avant moi a commenté.
Vous avez juste besoin de les ajouter à votre commande après le début de la chaîne que vous êtes de passage.
Vous pouvez utiliser n'importe quel processus dynamique chemin sur invite de commande
S'il vous plaît, placez votre commande dans un paramètre, comme le mentionné ci-dessous.
Vous devez définir toutes
\"
(citations) avec soin. Le paramètre\k
est utilisé pour quitter l'invite de commande ouverte après l'exécution.1) pour combiner les 2 commandes (par exemple
pause
etipconfig
)2) pour afficher le contenu d'un fichier (
MORE
est une ligne de commande viewer sur Windows)Une imbrication guillemet \" est pour la commande et le nom de fichier, le deuxième guillemet \" est pour le nom de fichier lui-même, pour les espaces etc. au nom particulier.