2009-06-15 6 views
4

J'exécute un fichier batch en utilisant du code Java. Le code est donné ci-dessous:Runtime.getRuntime(). Exec(), masque l'écran de la console

Process proc = null; 

proc = Runtime.getRuntime().exec("cmd /c start somebat.bat"); 

Avec ceci, l'écran d'invite de commande normal s'ouvre. Maintenant, je veux supprimer/masquer la fenêtre d'invite de commande (le noir). J'ai trouvé quelque part que si je supprime l'attribut start de la commande, il n'apparaît pas mais en le supprimant de la commande, la commande ne s'exécute pas et aucune exception n'est affichée.

Quelqu'un peut-il me dire comment supprimer cette fenêtre?

+0

Ajoutez une sortie à la fin du script de traitement par lots. –

Répondre

-2

Je ne connais pas très bien les fenêtres, mais je vous suggère d'omettre le bit "cmd" de la commande. cmd.exe est le terminal Windows. Juste une supposition. Rechercher les autres méthodes exec(), il y en a une qui prend la commande exécutable à exécuter, et les arguments. Sur UNIX au moins, vous ne pouvez normalement pas faire quoi que ce soit qu'un shell ne supporte pas (comme la redirection de la sortie vers un fichier) car ce sont des fonctionnalités de shell et non effectuées par le programme appelé. Pourrait être pourquoi vous trouvez si vous supprimez le préfixe cmd certaines choses ne fonctionnent pas.

juste essayer:

Process proc = Runtime.getRuntime().exec("somebat.bat");

+1

Hi, L'option donnée ne fonctionne pas. Le fichier bat n'est pas exécuté. –

+0

Avez-vous essayé de spécifier le chemin complet? – gubby

+0

Oui, j'ai essayé mais le fichier de commandes n'a pas été exécuté. –

1

Ajouter /Q

Runtime.getRuntime().exec("cmd /c /Q start somebat.bat"); 
+0

gigue Salut, l'option /Q ne fonctionne pas. La commande n'est pas exécutée quand j'ajoute/Q :-( –

0

Avez-vous essayé

start /min "title" "c:\path\batchfile.bat" 

Cela exécutera votre fichier de commandes sans la fenêtre. Il apparaîtra toujours dans la barre des tâches, cependant (puisqu'il est minimisé)

+0

Salut Brian, Je dois complètement cacher l'écran d'invite Cette option va juste réduire la fenêtre –

5

Avez-vous essayé l'option B de "démarrer"?

proc = Runtime.getRuntime().exec("cmd /c start /B somebat.bat"); 

Edit:
Ok, Anish, c'est drôle que votre code est pas exécuté.
Je mis en place un test unitaire:

Process proc = null; 
    try 
    { 
     proc = Runtime.getRuntime().exec("cmd /c start /B D:\\temp\\_test\\somebat.bat"); 
     proc = Runtime.getRuntime().exec("cmd /c call D:\\temp\\_test\\somebat.bat"); 
     proc = Runtime.getRuntime().exec("D:\\temp\\_test\\somebat.bat"); 
    } 
    catch (IOException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Mon fichier somebat.bat ressemble à ceci:

rem somebat.bat: 
d: 
cd D:\temp\_test 
copy somebat.bat somebat2.bat 

Les trois versions du bloc try ci-dessus travail dans mon scénario. Somebat.bat est copié dans somebat2.bat sans qu'une fenêtre de commande apparaisse (ce qui se passe, si j'utilise votre appel, montré dans votre question).

Edit 2: ronde suivante ;-)
Anish, pouvez-vous nous montrer comment votre somebat.bat et votre fichier fourmi ressemble?
Parce que tous les trois appels ci-dessous fonctionnent dans mon scénario:

code de test:

Process proc = null; 
proc = Runtime.getRuntime().exec("cmd /c start /B c:\\temp\\_test\\somebat.bat"); 
proc = Runtime.getRuntime().exec("cmd /c call c:\\temp\\_test\\somebat.bat"); 
proc = Runtime.getRuntime().exec("c:\\temp\\_test\\somebat.bat"); 

somebat.chauve-souris:

cd\temp\_test 
ant mycopy 

build.xml:

<?xml version="1.0"?> 
<project name="testproj" default="mycopy" basedir="."> 
    <target name="mycopy"> 
     <copy file="myfile.txt" tofile="mycopy.txt" /> 
    </target> 
</project> 

myfile.txt: fichier texte arbitraire

+0

Hi John Nopes/B ne résout pas non plus mon problème. fichier n'est pas exécuté –

+0

fait une commande de fourmi est en cours d'exécution dans mon fichier batch il est seulement CHAISE avec appel suivant avec d'autres options, il ne s'exécuta « cmd/c démarrage D:.... \\ temp \\ _ essai \\ somebat.bat » –

+1

Si vous exécutez une seule commande fourmi vous pouvez également envisager simplement le faire directement à partir de java: toutes les tâches Ant est accessible en cours et il suffit d'exécuter (avec la configuration appropriée) et Ant lui-même peut également être invoqué à partir en Java (voir par exemple: http://www.ibm.com/developerworks/websphere/library/techarticles/0502_gawor/0502 _gawor.html) –

0

Essayez ceci:.

Runtime.getRuntime() exec (cmd. exe /KC:/path/batchfile.bat);

2
Process proc = null; 
proc = Runtime.getRuntime().exec("cmd /c start C:\temp\somebat.bat"); 
+0

s'il vous plaît vous donner une réponse dans le bon format http://stackoverflow.com/editing-help#syntax-highlighting –

0

Vous pouvez utiliser "run" au lieu de "commencer".

Runtime.getRuntime().exec("cmd /c run somebat.bat");