2009-02-13 6 views

Répondre

8

Vous pouvez encoder le CD et le fichier de commandes dans la valeur de cmd.exe/K. De l'doco (cmd /?):

Notez que plusieurs commandes séparées par le séparateur de commande « & & » sont acceptés pour chaîne si entouré par des guillemets.

Exemple:

cmd /C "CD C:\ && Dir" 
cmd /C "CD C:\Windows && Dir" 
cmd /C "CD C:\Windows && MySuperSuperBatchFile" 

Pour plus de détails, exécutez:

cmd /? 

de la ligne de commande.

+0

Aurais-je par exemple pour ce – user48094

+0

Très utile! merci – Maroun

+0

Juste enregistré mon jour: D –

0

Il est difficile de faire de Java pour des raisons d'indépendance de plate-forme loufoque: en gros, que faire si vous utilisez Java sur un système qui n'a pas de répertoires hiérarchiques?

Il y a un certain nombre de solutions de contournement en fonction de ce que vous êtes vraiment essayer de le faire, mais peut-être est le plus simple d'exécuter la commande éventuelle à l'aide java.lang.Runtime.exec().

.

-1

Conserver le fichier séquentiel dans "chemin". Vous pouvez l'exécuter sans aller à un répertoire spécifique.

(Par exemple, vous pouvez avoir une entrée "set path =% de path%; C: .......... \ YourBatchFile.bat" dans Autoexec.bat dans un environnement Windows)

0

get l'environnement var "comspec", puis exec % comspec%/c start/répertoire d/b batchfile.bat

1

un couple des variations java.lang.Runtime.exec() a un argument dir, donc je suppose que vous ne pensez pas à cela?

Vous pouvez compiler le programme C suivant et l'exécuter en tant que wrapper pour démarrer n'importe quel programme dans le répertoire de votre choix. Si vous utilisez un tableau de chaînes avec Runtime.exec, vous éviterez tous les problèmes d'analyse/de portabilité/de citation correcte des arguments.

Je n'ai pas une machine Windows pour tester ici, mais si vous compilez le programme C pour vous cdexe.exe devrais pouvoir l'utiliser comme suit:

public class Main { 
     public static void main(String args[]) { 
       String[] s = { "c:\\some\\place\\cdexe.exe", 
       "c:\\start\\dir", "c:\\my\\batch\\file.bat", "arg1", "..." }; 
       try { 
         java.lang.Runtime.getRuntime().exec(s); 
       } catch (java.io.IOException e) { 
         e.printStackTrace(); 
       } 
     } 
} 

Je suppose que unistd.h n'est peut-être pas disponible sur Windows, mais remplacez-en par un contenant un prototype execv.

#include <stdio.h> 
#include <unistd.h> // or hard code "int execv(const char *path, char *const argv[]);" 

int main(int argc, char *argv[]) 
{ 
     if (argc < 3) { 
       fprintf(stderr, "Error: Usage: %s <directory> <program> [arguments]\n", argv[0]); 
       return 1; 
     } 
     if (chdir(argv[1]) < 0) { 
       perror("Error"); 
       fprintf(stderr, "chdir(%s) failed\n", argv[1]); 
       return 1; 
     } 
     argv[1] = argv[2]; 
     execv(argv[1], &argv[2]);  // use execvp if you want PATH to be searched 
     perror("Error"); 
     fprintf(stderr, "execv returned\n"); 
     return 0; 
} 
+1

+1 pour signaler que exec a un dir, -1 pour C = 0 ... désolé –

7

Méfiez-vous de l'exec de Java. Il peut se bloquer si le traitement par lots remplit le tampon de sortie et provoque d'autres problèmes étranges.

Je vous suggère de regarder apache exec.Spécifiquement pour vos besoins, vous devriez noter que l'interface Executor a une méthode setWorkingDirectory.

Utilisation de base:

Executor exec = new DefaultExecutor(); 
exec.setWorkingDirectory(new File("C:\\My\\Dir\\")); 
CommandLine cl = new CommandLine("mybatch.bat"); 
int exitvalue = exec.execute(cl); 
+0

'exec.setWorkingDirectory()' prend un fichier comme un argument pas une chaîne –

+0

Bon point . Fixé. – itsadok

Questions connexes