2016-10-06 95 views
-1

我必须从本地机器执行远程机器上存在的批处理文件。如何在java中远程执行批处理文件?

我通过FTP连接到远程计算机,并尝试执行批处理文件remotely.but不能够做到这一点也并不getiing任何异常。下面是我的代码

public static void main(String[] args) throws SocketException, IOException, 
     InterruptedException { 
static String server = "192.168.2.133"; 
static int port = 21; 
static String user = "kamal"; 
static String pass = "12345"; 
static FTPClient ftpClient; 

    // TODO Auto-generated method stub 
    ftpClient = new FTPClient(); 
    ftpClient.connect(server, port); 
    ftpClient.login(user, pass); 
    ftpClient.enterLocalPassiveMode(); 
    ftpClient.changeWorkingDirectory("/"); 

    System.out.println(ftpClient.isConnected()); 
    // ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 

    System.out.println("ftpClient.printWorkingDirectory() " 
      + ftpClient.printWorkingDirectory()); 

    String[] str = ftpClient.listNames(ftpClient.printWorkingDirectory()); 
    for (String string : str) { 
     System.out.println(string); 
    } 

    // ftpClient.changeWorkingDirectory(ftpClient.printWorkingDirectory().concat("demo")); 
    System.out.println("ftpClient.printWorkingDirectory() " 
      + ftpClient.printWorkingDirectory()); 
    String psCommand = "C:/Users/kamlesh.kumar/Downloads/PSTools/PsExec.exe //" 
      + server + " -u " + user + " -p " + pass; 
    psCommand = psCommand + " " + "MEF.bat"; 
    // psCommand = psCommand + " " + commandToRunOnRemoteMachine + " " + 
    // parameters; 
    String[] cmd = new String[5]; 
    cmd[0] = "cmd.exe"; 
    cmd[1] = "/C"; 
    cmd[2] = psCommand; 
    cmd[3] = ""; 
    cmd[4] = ""; 
    // Run remote command 
    // ftpClient.changeWorkingDirectory(ftpClient.printWorkingDirectory().concat("\\\\192.168.2.135\\demo\\demo")); 
    // System.out.println(ftpClient.printWorkingDirectory()); 
    File f = new File(ftpClient.printWorkingDirectory()); 
    Process p = null; 
    try { 
     p = Runtime.getRuntime().exec(cmd, null, f); 
    } catch (Exception e) { 
     System.out.println(e.toString()); 
     e.printStackTrace(); 
    } 

    int exitStatus = 0; 
    try { 
     exitStatus = p.waitFor(); 
     System.out.println("exitStatus in try " + exitStatus); 
    } catch (Exception e) { 
     System.out.println("exitStatus" + exitStatus); 
     System.out.println(e.toString()); 
     e.printStackTrace(); 
    } finally { 
     System.out.println("exitStatus in finally " + exitStatus); 
    } 
    if (exitStatus == 0) { 
     System.out.println("Done"); 

    } 

} 
+1

你不能用FTP远程执行文件。看看使用微软的PSEXEC实用程序。 – Squashman

+0

ftp仅用于文件传输。最常用的远程执行工具是PSexec,但从[java](http://forum.sysinternals.com/faq-common-pstools-issues_topic15920.html)调用时会遇到问题。您可以检查SCHTASKS或WMIC帮助,以了解如何在没有第三方工具的情况下远程执行脚本。 – npocmaka

+0

您的问题的一个答案是RMI。你甚至将它包含在标签中。那你为什么试图使用FTP? – EJP

回答

0

您可以从https://technet.microsoft.com/en-us/sysinternals/pxexec.aspx得到PSEXEC和我之前所做的是制作一个批处理文件,它将要在远程PC上运行的文件复制到该PC上,然后使用PSEXEC远程执行它,并删除该文件。我不知道这是你想要的,但它可能就足够了。

set remotecpu="computer you're sending it to" 

robocopy "localpcdrive\location1\scripts\script you want ran" \\%remotecpu%\c$\temp_folder 


psexec \\%remotecpu% -u "username" -p "password" -i -d "C:\temp_folder\path to\script you want ran" 

如果我没有记错的话,这将执行该文件,然后你只是做一个DEL命令并删除temp_folder你的脚本下。或者用一些像花式的东西

If Exist "%SystemDrive%\temp_folder" (RD/S/Q "%SystemDrive%\temp_folder") 
相关问题