J'essaie d'exécuter un fichier de lot dans un autre répertoire de mon exécutable Java. J'ai le code suivant: Le résultat est que le programme ouvre une fenêtre CMD dans le répertoire racine où le programme a été exécuté et n'accumule pas le chemin de fichier que j'ai fourni. p> p>
5 Réponses :
plutôt que runtime.exeec (commande string) code>, vous devez utiliser la commande
exécutée (chaîne de chaîne, chaîne [] ENVP, fichier dir) code> Méthode Signature:
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "upsert.bat");
File dir = new File("C:/Program Files/salesforce.com/Data Loader/cliq_process/upsert");
pb.directory(dir);
Process p = pb.start();
Dir est le même chemin que j'ai inclus précédemment? ("\" C: \\ Program Files \\ Salesforce.com \\ Loader de données \\ cliq_process \\ upsert \\ upsert.bat \ "")
Si vous utilisez ProcessBuilder, je pense que vous n'avez pas besoin de citations
@RICARDO Merci pour la clarification; Je ne faisais aucune hypothèse. Je vais mettre à jour la réponse depuis que cela en fait un peu plus simple.
@MadProgrammer Oui, je pense que vous avez raison - je venais de copier et collé le chemin.
@RICARDO Je l'ai simplifié un peu plus loin en utilisant des barres obliques vers l'avant au lieu de glaîtes à dos double lisibles sur le chemin. L'API de fichier de Java reconnaît les deux styles.
@rob i récemment rejeté une modification à partir d'un utilisateur Crayant que la modification était pour une erreur de compilation. Editez votre réponse si elle est valide.
@rob Votre solution proposée a fait l'affaire, mais je souhaite aussi ouvrir une fenêtre de commande black b> de sorte que je puisse voir i> b> la sortie des commandes qui sont dans le fichier .bat.any Vues sur ceci?
Problème résolu, pour maintenir la fenêtre de commande: - Liste cmdandargs = Arrays.aSlist (nouvelle chaîne [] {"cmd.exe", "/ c", "start.bat"}); Code>
@Saurabhbhoomkar sûr, remplacez simplement le / c i> avec / k i>. Notez que si votre processus écrit une quantité importante d'informations sur STDOUT ou STDOUTR, vous devrez consommer ces flux. Vous pouvez lancer des threads qui lisent les flux de console de processus et écrivent cette sortie sur la console et / ou le fichier journal de votre programme Java. Si vous ne consommez pas les flux, le processus peut bloquer et sembler suspendre lorsque le ou les tampons remplissent.
essayer suivant
try { String[] command = {"cmd.exe", "/C", "Start", "D:\\test.bat"}; Process p = Runtime.getRuntime().exec(command); } catch (IOException ex) { }
C'est tôt alors il me manque peut-être quelque chose, mais comment va-t-il différent de ce que fait l'OP? Ils ont besoin d'exécuter un fichier de commandes dans un endroit spécifique
Votre code va bien, mais le problème est à l'intérieur du fichier de commandes. P>
Vous devez montrer le contenu du fichier BAT, Votre problème est dans les chemins dans le fichier BAT. P>
import java.lang.Runtime; Process run = Runtime.getRuntime().exec("cmd.exe", "/c", "Start", "path of the bat file"); This will work for you and is easy to use.
suivi est fonctionné pour moi
Si vous dites "Démarrer /?" Dans une fenêtre d'invite de commande, il décrira les options sur la commande
Démarrer code>; Il y a une option "/ d" qui pourrait aider.