如何在java中远程执行批处理文件?

时间:2016-10-06 12:08:53

标签: java sockets batch-file ftp rmi

我必须从本地机器执行远程机器上的批处理文件。

我通过ftp连接到远程计算机并尝试远程执行批处理文件。但是不能这样做也不能解决任何异常。下面是我的代码

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 个答案:

答案 0 :(得分: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")