JAVA conversando com arquivos .bat

23 respostas
chicogodoy.evo

Bom dia, quero fazer com que dados que serão obtidos através de uma interface java sejam enviados para um arquivo .bat, que lerá os dados e iniciará o processo.

O problema que tenho que resolver é o seguinte:

Quero iniciar uma conexão VPN com o OpenVPN com o seguinte comando.

Arquivo: start.bat

cd %PROGRAMFILES%\OpenVPN\config
openvpn --config client.ovpn

Mas, não quero utilizar a interface do PROMPT-DOS, então quero que o bytecode resgate os dados digitados pelo usuários através desta interface JAVA e que inicie o arquivo .bat com estes dados.

Não sei se fui claro.

Gostaria de saber se é possível.

Obrigado!

23 Respostas

tiagogn

Runtime.getRuntime().exec("start.bat ");

Você pode concatenar os parâmetros para a String passada.

E

Algo como:

String programFiles = System.getenv ("PROGRAMFILES");
File directory = new File (new File (programFiles), "OpenVPN\config");
// http://download-llnw.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exec%28java.lang.String[],%20java.lang.String[],%20java.io.File%29
Process proc = Runtime.getRuntime().exec (
     new String[] {"openvpn", "--config", "client.ovpn"}, 
     null,
     directory);
E

tiagogn:
Runtime.getRuntime().exec("start.bat ");

Você pode concatenar os parâmetros para a String passada.

Isso não funciona, porque start.bat não é um executável, precisando ser interpretado pelo cmd.exe. Use algo como “cmd.exe /c start.bat”

lina

Oi,

Não é possível rodar um aplicativo bat por Runtime.

Nem com chamando o cmd antes, conforme o entanglement falou…

Tchauzin!

OliveirakunJava

lina:
Oi,

Não é possível rodar um aplicativo bat por Runtime.

Nem com chamando o cmd antes, conforme o entanglement falou…

Tchauzin!

Opa é possível sim, é só fazer da seguinte forma:

public class ExecutaBat {
	
	private final String bat = "c:\inicia_vpn.bat";
	

	public void executar(){
		try {
			Runtime.getRuntime().exec("cmd /c start /B "+bat);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	public static void main(String[] args){
		new ExecutaBat().executar();
	}
	
}

Boa sorte!

craniac

Bom, eu uso o Bat To Exe Converter,

convertendo o arquivo bat pra exe dah pra usar o Runtime.getRuntime().exec()

vlw!!

chicogodoy.evo

Legal, gostei das propostas, agora ja sei que é possível fazer o que eu estou pensando.

Mas quando compilo e executo a Classe do OliveirakunJava, nada acontece, estou utilizando o eclipse.

OliveirakunJava

chicogodoy.evo:
Legal, gostei das propostas, agora ja sei que é possível fazer o que eu estou pensando.

Mas quando compilo e executo a Classe do OliveirakunJava, nada acontece, estou utilizando o eclipse.

Vc deve colocar o caminho do arquivo na variável bat. O arquivo .bat vai ser executado em modo silencioso(sem aparecer a janela do prompt do ms-dos), se vc quiser ver a janela para ter certeza de que o arquivo foi executado basta retirar o parâmetro /B na linha: ("cmd /c start /B "+bat)

andredemelo

Utilizo o .bat para ser executar pelo pronpt, não sabia que o bytecode conseguia fazer o mesmo, este tópico me ajudou bastante!

Vou tentar executa-lo desta forma nas próximas vezes que eu precisar, ao invés de utilizar pelo prompt!

J

andredemelo:
Utilizo o .bat para ser executar pelo pronpt, não sabia que o bytecode conseguia fazer o mesmo, este tópico me ajudou bastante!

Vou tentar executa-lo desta forma nas próximas vezes que eu precisar, ao invés de utilizar pelo prompt!

Não é o bytecode que faz isso, e sim o “cmd”(shell do windows). A solução postada atraz apenas pede ao cmd.exe para executar seu script.

chicogodoy.evo

Legal, é verdade, o “/B” oculta a execução, entretanto se eu preciso inserir um usuário e senha, pois estou testando VPNs com certificados.

Observem na imagem o que acontece ao desocultar a execução do arquivo .bat

Preciso inserir um usuário e senha que o usuário irá digitar na execução do arquivo.

É possível?

andredemelo

Obrigado por esclarecer juliocbq, então faço de uma outra forma, que também executa o .bat!
Ele tembém executa pelo “cmd”.

O “.bat” é útil pra mim para que eu efetue scripts de filmagens dos sistemas desenvolvidos, utilizando o SeleniumServer, para a equipe de qualidade!

andredemelo

Especifica o usuário e a senha no “.bat” criado.

lina

Oi,

Alguém ai realmente conseguiu executar o .bat ?

Porque aqui não deu certo com nenhuma opção. E olha que já tentei todas!

Tchauzin!

chicogodoy.evo

Não dá, pois quando executo este client.ovpn entre em uma instância do OpenVPN.

Ou seja, as próximas linhas de comando só serão executadas após o término da instância.

Ex.:

tenho um .bat seguinte:

=============== INICIO BAT ===============
cd %PROGRAMFILES%\OpenVPN\config
openvpn --config client.ovpn [color=red]// Aqui executo o arquivo (dentro desta execução o PROMPT me pede usuário e senha).[/color]

usuario [color=red]// Ao executar esta linha estou fora do arquivo.[/color][color=red] [/color]

senha [color=red]// Ao executar esta linha estou fora do arquivo.[/color][color=red] [/color]
=============== FIM BAT ===============

chicogodoy.evo

lina:
Oi,

Alguém ai realmente conseguiu executar o .bat ?

Porque aqui não deu certo com nenhuma opção. E olha que já tentei todas!

Tchauzin!

Oii, consegui sim.
Só que o .bat está sendo executado em background, retire o parâmetro “/B” conforme indico abaixo.

============= Método executar ================

public void executar(){

try {

Runtime.getRuntime().exec(cmd /c start [color=red]/B[/color] + bat);

System.out.println(user1);

System.out.println(123);

} catch (IOException e) {

System.out.println("ERRO: ");

e.printStackTrace();

}

============= Método executar ================

E execute novamente!

OliveirakunJava

chicogodoy.evo:

Preciso inserir um usuário e senha que o usuário irá digitar na execução do arquivo.

É possível?

É sim mas é um pouco mais complicado. O comando Runtime.getRuntime.exec() retorna um processo, vc vai ter que pegar esse processo retornado e abrir um stream de entrada e saida para ler e enviar dados, muito parecido com sockets. Vai ficar mais ou menos assim:

Process pr = Runtime.getRuntime().exec("cmd /c start /B "+bat);
PrintStream output = new PrintStream(pr.getOutputStream());
Scanner scanner = new Scanner(pr.getInputStream());

output.println("User");//escrevendo dados no stream

System.out.println(scanner.nextLine());//imprimindo a saida dos dados

O ideal é vc criar uma thread separada para ler a saida dos dados e enviar os comandos pela thread principal, se vc ja trabalhou com sockets não vai ter problemas.

Lina, tenta executar o código que eu postei mas sem o parâmetro /B na linha do runtime.exec(), dessa forma a janela de prompt aparecerá na tela. No caso essa linha ficaria dessa forma:

Runtime.getRuntime.exec("cmd /c start " + bat);
andredemelo

E se vc utilizar o ‘Selenium Server’ para simular a autentificação? Criando um ‘.jar’ com a execução do login e senha por um .bat?

chicogodoy.evo

Iiiiii… ai ferrou…
Nunca trabalhei com Sockets.
Vou testar esse código.

Existe algum tutorial específico para isso?

PS.: Valeu a todos pela ajuda, de fato que todos ajudaram na minha questão, afinal, agora sei que é possível.

chicogodoy.evo

Ai que tá… é a primeira vez que escuto esse nome

heheheh…

vou ter que estudar sobre o Seleniu Server.

Mas valeu pela dica!

OliveirakunJava

chicogodoy.evo:

Iiiiii… ai ferrou…
Nunca trabalhei com Sockets.
Vou testar esse código.

Existe algum tutorial específico para isso?

PS.: Valeu a todos pela ajuda, de fato que todos ajudaram na minha questão, afinal, agora sei que é possível.

Na apostila FJ-11 da Caelum tem bons exemplos de sockets:http://www.caelum.com.br/apostilas/
Boa sorte!

andredemelo

Se te ajudar, acompanha este blog aqui, que nele tem vários post bem legais sobre o selenium!!

http://www.seuenium.com.br/

Tem também o site do Slenium RC, se tiver interece

http://seleniumhq.org/docs/05_selenium_rc.html

Boa Sorte e qualquer coisa só postar, que se eu puder te ajudar estarei por aqui dnovo!

chicogodoy.evo

Ok galera, agora é trabalho, vou ter que estudar mesmo, valeu pelas dicas e muito obrigado por esclarecerem as minhas dúvidas.

Valeu mesmo!!

Meus objetivos foram alcançados, agora ja sei o que fazer.

Abs.

Criado 5 de outubro de 2010
Ultima resposta 5 de out. de 2010
Respostas 23
Participantes 8