2013-09-30 9 views
5

J'essaie d'exécuter un fichier de commandes qui se trouve dans un autre répertoire à partir de mon exécutable Java. J'ai le code suivant:Exécuter le fichier de commandes à partir du code Java

try { 
     Process p = Runtime.getRuntime().exec("cmd /c start \"C:\\Program Files\\salesforce.com\\Data Loader\\cliq_process\\upsert\\upsert.bat\"") ;   
    } catch (IOException ex) { 
    } 

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'a pas accès le chemin du fichier que j'ai fourni.

+0

Si vous dites "start /?" à partir d'une fenêtre d'invite de commandes, il décrira les options de la commande 'start'; il y a une option "/ D " qui pourrait vous aider. – ajb

Répondre

20

Plutôt que Runtime.exec(String command), vous devez utiliser la signature de la méthode exec(String command, String[] envp, File dir):

Process p = Runtime.getRuntime().exec("cmd /c upsert.bat", null, new File("C:\\Program Files\\salesforce.com\\Data Loader\\cliq_process\\upsert")); 

Mais personnellement, j'utiliser ProcessBuilder à la place, ce qui est un peu plus bavard, mais beaucoup plus facile à utiliser et à déboguer que Runtime.exec().

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(); 
+1

Dir est le même chemin que j'ai inclus précédemment? ("\" C: \\ Program Files \\ salesforce.com \\ Chargeur de données \\ cliq_process \\ upsert \\ upsert.bat \ "") – Ricardo

+0

Si vous utilisez ProcessBuilder, je crois que vous n'aurez pas besoin des guillemets – MadProgrammer

+0

@ Ricardo Merci pour la clarification; Je ne faisais aucune hypothèse. Je mettrai à jour la réponse car cela la rend un peu plus simple. – rob

6

essayer suivante

try { 
      String[] command = {"cmd.exe", "/C", "Start", "D:\\test.bat"}; 
      Process p = Runtime.getRuntime().exec(command);   
     } catch (IOException ex) { 
     } 
+4

Il est tôt, il se peut que je manque quelque chose, mais en quoi est-ce différent de ce que fait l'OP? Ils doivent exécuter un fichier de commandes dans un emplacement spécifique – MadProgrammer

2

Votre code est très bien, mais le problème est à l'intérieur du fichier de commandes.

Vous devez afficher le contenu du fichier bat, votre problème est dans les chemins dans le fichier bat.

0
import java.lang.Runtime; 

Process run = Runtime.getRuntime().exec("cmd.exe", "/c", "Start", "path of the bat file"); 

Cela fonctionnera pour vous et est facile à utiliser.

1

Ce qui suit est a fonctionné pour moi

File dir = new File("E:\\test"); 
     ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "Start","test.bat"); 
     pb.directory(dir); 
     Process p = pb.start(); 
Questions connexes