2010-09-01 9 views
4

Je veux exécuter un fichier bat situé à distance sur le serveur \\testserver\someFolderName\test.bat. J'utilise le constructeur de processus et voulait chandel le répertoire avec procbuilder.directory(....), mais ne pouvais pas réussir.exécuter le fichier batch à distance java

Toute aide est appréciée. Merci

+0

Avez-vous déjà trouvé une solution à ce problème? – Sandman

Répondre

2

Dans le passé, je l'ai fait rapide et sale avec PSExec

Il suffit de commencer que de votre programme son propre processus avec les arguments nécessaires pour accéder au lot sur l'ordinateur distant.

1

Je ne pense pas que vous puissiez faire des chemins UNC pour ProcessBuilder, mais cela n'a pas vraiment d'importance dans tous les cas.

Pour exécuter un fichier .bat, vous devez exécuter un shell de commande de fenêtres et ont qui exécutent le fichier .bat, et l'interpréteur de commandes ne prend pas en charge les chemins UNC ... Le chemin autour est d'exécuter votre commande comme ceci:

cmd.exe /C "pushd \\testserver\someFolderName && test.bat && popd" 

Essentiellement, vous indiquez l'invite cmd pour monter votre dossier distant comme un lecteur temporaire (pushd \ testserver \ someFolderName), exécutez test.bat puis démonter le lecteur temporaire (popd).

+2

est le code comme suit: String [] commande = {"CMD", "/ C", "pushd \\\\ serveur de tests \\ someFolderName && test.bat && popd"}; \t \t ProcessBuilder probuilder = nouveau ProcessBuilder (commande); – user234194

+0

Chaîne [] command = {"cmd.exe", "/ C", "pushd \\\\ serveur de tests \\ someFolderName && test.bat && popd"}; \t \t \t \t ProcessBuilder probuilder = nouveau ProcessBuilder (commande); J'ai essayé mais je n'ai pas réussi à le faire fonctionner. – user234194

+0

Cela ne fonctionne pas. Il s'exécute sur le même hôte local. – user234194

2

Ceci est le code de travail que nous utilisons actuellement:

try {    
    ProcessBuilder launcher = new ProcessBuilder(); 
    Map<String, String> environment = launcher.environment(); 
    launcher.redirectErrorStream(true); 
    launcher.directory(new File("\\\\<your remote computer name>\\TIERS\\DEV1\\RP\\VISUAL_BASIC\\")); 

    environment.put("name", "var"); 
    launcher.command("your.exe"); 
    Process p = launcher.start(); // And launch a new process 

} catch (Exception e){ 
    e.printStackTrace(); 
} 
+0

Le système ne peut pas trouver le fichier spécifié est mon résultat. L'exécution avec le même chemin et le même nom d'exécutable dans l'explorateur fonctionne, donc le chemin et le nom de l'exécutable sont corrects. – Steven

1

cela fonctionne aussi en java comme ci-dessous:

Process p1 = Runtime.getRuntime().exec("cmd.exe /C pushd \\yourserver\yourfolderpath && yourexecutable.bat && popd"); 
+0

Cela a fonctionné pour moi à travers Java. Mais j'ai dû échapper à l'url.- \\\\ yourserver \\ yourfolderpath. Merci! –

Questions connexes