Executar comando SCP com Java no Windows

Estou tentando executar o o comando abaixo no meu programa Java que esta rodando no windows mas não faz nada. O que tem algo especifico para funcionar no windows pois tenho a mesma implementação do Unix e funciona.

Runtime
    .getRuntime()
    .exec("scp -i "C:\Program Files (x86)\ICW\home\envio\.ssh\id_rsa"
                        Arquivo.txt usuario@servidor:/home/teste/");`
1 curtida

O Windows não tem o programa scp igual ao Unix. Você provavelmente precisará instalar um equivalente e chamar o programa de acordo com a plataforma.

Abraço.

Obrigado por responder TerraSkill,

quando eu executo o comando direto no prompt do DOS funciona o comando.
Mesmo assim preciso instalar algo equivalente ao Unix ?
se sim, tem alguma sugestão do que instalar ? o comando muda a forma como estou fazendo com esta instalação ?

Runtime.getRuntime().exec("scp -i "C:\Program Files (x86)\ICW\home\envio\.ssh\id_rsa" Arquivo.txt usuario@servidor:/home/teste/");

Entendi.

O Runtime.getRuntime().exec() retorna um Process, então você poderia verificar o status desse Process para saber se ele está ok ou não. Se estiver null, por exemplo, provavelmente o comando deu erro. Se já não estiver fazendo, teste com um try…catch.

try{
  Process p = Runtime.getRuntime().exe(..........); // comando aqui
  //verifica status de p
}catch(Exception e){
  e.printStackTrace();
}

Outro problema pode ser a presença de espaços no path, que o Windows não lida muito bem. A abordagem de usar aspas como você fez pode dar certo, mas não sei no detalhe. Tente chamar o rundll32, como sugerido aqui.

Abraço.

Fiz o teste mas não funcinou…
Process até retorna mas não fez os envios

Consegui resolver o problema da seguinte forma:

String[] command = new String[] {“cmd.exe”, “/c”, “start “+ props.getProperty(“bat_scp”) +” “+ file.getName() +” “+ dirDestinoSFTP +””};
Runtime.getRuntime().exec(command);

Gostaria de executar o comando direto no java mas nada do que fiz deu certo.
A alternativa foi criar um .bat com o comando SCP e como tenho varios arquivos para enviar para diretórios difentes, eu pego o nome do arquivo e o caminho de destino do Java e faço uma chamada no .bat passando os parametros nome e caminho destino.

Há algum tempo atrás eu utilizei o JSch, uma biblioteca pra utilizar alguns protocolos como SCP, SFTP, SSH e mais alguns…

Talvez seja mais interessante que ter de depender de uma ferramenta externa no sistema…

http://www.jcraft.com/jsch/examples/ScpTo.java.html