iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java如何连续执行多条cmd命令
  • 400
分享到

java如何连续执行多条cmd命令

2024-04-02 19:04:59 400人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

java连续执行多条cmd命令 命令之间用&连接 例如: Process p = Runtime.getRuntime().exec("cmd /c d: & c

java连续执行多条cmd命令

命令之间用&连接

例如:


Process p = Runtime.getRuntime().exec("cmd /c d: & cd bin/");  

java ssh登录执行多条cmd命令

java登录ssh执行多条命令,解决出现more自动回车的问题


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException; 
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; 
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.UIKeyboardInteractive;
import com.jcraft.jsch.UserInfo;
 
public class JavaSsh implements Runnable {
	protected Logger logger = LogManager.getLogger();
	
	private static final String BACKSPACE = new String(new byte[] { 8 });
 
	
	private static final String ESC = new String(new byte[] { 27 });
 
	
	private static final String BLANKSPACE = new String(new byte[] { 32 });
 
	
	private static final String ENTER = new String(new byte[] { 13 });
 
	
	private static final String[] PREFIX_STRS = { BACKSPACE + "+" + BLANKSPACE + "+" + BACKSPACE + "+",
			"(" + ESC + "\\[\\d+[A-Z]" + BLANKSPACE + "*)+" };
 
	private int sleepTime = 200;
 
	
	private int timeout = 4000;
 
	
	protected StringBuffer currEcho;
 
	
	protected StringBuffer totalEcho; 
	private String ip;
	private int port;
	private String endEcho = "#,?,>,:";
	private String moreEcho = "---- More ----";
	private String moreCmd = BLANKSPACE;
	private JSch jsch = null;
	private Session session;
	private Channel channel;
 
	@Override
	public void run() {
		InputStream is;
		try {
			is = channel.getInputStream();
			String echo = readOneEcho(is);
			while (echo != null) {
				currEcho.append(echo);
				String[] lineStr = echo.split("\\n");
				if (lineStr != null && lineStr.length > 0) {
					String lastLineStr = lineStr[lineStr.length - 1];
					if (lastLineStr != null && lastLineStr.indexOf(moreEcho) > 0) {
						totalEcho.append(echo.replace(lastLineStr, ""));
					} else {
						totalEcho.append(echo);
					}
				}
				echo = readOneEcho(is);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 
	protected String readOneEcho(InputStream instr) {
		byte[] buff = new byte[1024];
		int ret_read = 0;
		try {
			ret_read = instr.read(buff);
		} catch (IOException e) {
			return null;
		}
		if (ret_read > 0) {
			String result = new String(buff, 0, ret_read);
			for (String PREFIX_STR : PREFIX_STRS) {
				result = result.replaceFirst(PREFIX_STR, "");
			}
			try {
				return new String(result.getBytes(), "GBK");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
				return null;
			}
		} else {
			return null;
		}
	}
 
	public JavaSsh(String ip, int port, String endEcho, String moreEcho) {
		this.ip = ip;
		this.port = port;
		if (endEcho != null) {
			this.endEcho = endEcho;
		}
		if (moreEcho != null) {
			this.moreEcho = moreEcho;
		}
		totalEcho = new StringBuffer();
		currEcho = new StringBuffer();
	}
 
	private void close() {
		if (session != null) {
			session.disconnect();
		}
		if (channel != null) {
			channel.disconnect();
		}
	}
 
	private boolean login(String[] cmds) {
		String user = cmds[0];
		String passWord = cmds[1];
		jsch = new JSch();
		try {
			session = jsch.getSession(user, this.ip, this.port);
			session.setPassword(passWord);
			UserInfo ui = new SSHUserInfo() {
				public void showMessage(String message) {
				}
 
				public boolean promptYesNo(String message) {
					return true;
				}
			};
			session.setUserInfo(ui);
			session.connect(30000);
			channel = session.openChannel("shell");
			channel.connect(3000);
			new Thread(this).start();
			try {
				Thread.sleep(sleepTime);
			} catch (Exception e) {
			}
			return true;
		} catch (JSchException e) {
			return false;
		}
	}
 
	protected void sendCommand(String command, boolean sendEnter) {
		try {
			OutputStream os = channel.getOutputStream();
			os.write(command.getBytes());
			os.flush();
			if (sendEnter) {
				currEcho = new StringBuffer();
				os.write(ENTER.getBytes());
				os.flush();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 
	protected boolean containsEchoEnd(String echo) {
		boolean contains = false;
		if (endEcho == null || endEcho.trim().equals("")) {
			return contains;
		}
		String[] eds = endEcho.split(",");
		for (String ed : eds) {
			if (echo.trim().endsWith(ed)) {
				contains = true;
				break;
			}
		}
		return contains;
	}
 
	private String runCommand(String command, boolean ifEnter) {
		currEcho = new StringBuffer();
		sendCommand(command, ifEnter);
		int time = 0;
		if (endEcho == null || endEcho.equals("")) {
			while (currEcho.toString().equals("")) {
				try {
					Thread.sleep(sleepTime);
					time += sleepTime;
					if (time >= timeout) {
						break;
					}
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		} else {
			while (!containsEchoEnd(currEcho.toString())) {
				try {
					Thread.sleep(sleepTime);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				time += sleepTime;
				if (time >= timeout) {
					break;
				}
				String[] lineStrs = currEcho.toString().split("\\n");
				if (lineStrs != null && lineStrs.length > 0) {
					if (moreEcho != null && lineStrs[lineStrs.length - 1] != null
							&& lineStrs[lineStrs.length - 1].contains(moreEcho)) {
						sendCommand(moreCmd, false);
						currEcho.append("\n");
						time = 0;
						continue;
					}
				}
			}
		}
		return currEcho.toString();
	}
 
	private String batchCommand(String[] cmds, int[] othernEenterCmds) {
		StringBuffer sb = new StringBuffer();
		for (int i = 2; i < cmds.length; i++) {
			String cmd = cmds[i];
			if (cmd.equals("")) {
				continue;
			}
			boolean ifInputEnter = false;
			if (othernEenterCmds != null) {
				for (int c : othernEenterCmds) {
					if (c == i) {
						ifInputEnter = true;
						break;
					}
				}
			}
			cmd += (char) 10;
			String resultEcho = runCommand(cmd, ifInputEnter);
			sb.append(resultEcho);
		}
		close();
		return totalEcho.toString();
	}
 
	public String executive(String[] cmds, int[] othernEenterCmds) {
		if (cmds == null || cmds.length < 3) {
			logger.error("{} ssh cmds is null", this.ip);
			return null;
		}
		if (login(cmds)) {
			return batchCommand(cmds, othernEenterCmds);
		}
		logger.error("{} ssh login error", this.ip);
		return null;
	}
 
	private abstract class SSHUserInfo implements UserInfo, UIKeyboardInteractive {
		public String getPassword() {
			return null;
		}
 
		public boolean promptYesNo(String str) {
			return true;
		}
 
		public String getPassphrase() {
			return null;
		}
 
		public boolean promptPassphrase(String message) {
			return true;
		}
 
		public boolean promptPassword(String message) {
			return true;
		}
 
		public void showMessage(String message) {
		}
 
		public String[] prompTKEyboardInteractive(String destination, String name, String instruction, String[] prompt,
				boolean[] echo) {
			return null;
		}
	}
 
	public static void main(String[] args) {
		String ip = "192.168.0.238";
		int port = 22;
		JavaSsh JavaSsh2 = new JavaSsh(ip, port, null, null);
		String username = "ssh";
		String password = "yzfar.com";
		String[] cmds = { username, password, "display Mac-address", "display mac-address" };
		String executive = JavaSsh2.executive(cmds, null);
		System.out.println(executive);
	}
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java如何连续执行多条cmd命令

本文链接: https://www.lsjlt.com/news/132268.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java如何连续执行多条cmd命令
    java连续执行多条cmd命令 命令之间用&连接 例如: Process p = Runtime.getRuntime().exec("cmd /c d: & c...
    99+
    2022-11-12
  • Linux中如何连续执行多条命令
    这篇文章主要为大家展示了“Linux中如何连续执行多条命令”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux中如何连续执行多条命令”这篇文章吧。每条命令使用";"隔开,...
    99+
    2023-06-09
  • Linux 连续执行多条命令的方法(推荐)
    每条命令使用";"隔开,则无论前边的命令执行成功与否都会继续执行下一条命令 这里,故意将第二条命令中的echo多写了一个o,命令执行出错,但并不影响后续命令的执行 可以这么想,如果用分号来间隔命令,就相当于...
    99+
    2022-06-04
    多条 命令 方法
  • Java如何执行cmd命令
    目录Java执行cmd命令Java执行cmd命令总结解释一下参数 总结Java执行cmd命令 //当前绝对路径 System.out.println(IoUtil.read...
    99+
    2023-01-09
    Java执行cmd命令 Java执行cmd Java cmd命令
  • java Runtime如何执行多条命令
    目录java Runtime如何执行多条命令Runtime.getRuntime().exec 执行多条java Runtime如何执行多条命令 使用 && 分隔命令...
    99+
    2022-11-12
  • Java中如何执行多条shell/bat命令
    java调用process执行命令 public class ShellUtil { public static String runShell (String shSt...
    99+
    2022-11-12
  • JAVAscript如何执行cmd命令
    这篇文章主要介绍JAVAscript如何执行cmd命令,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! JAVAscript执行cmd命令的方法:首先打开相...
    99+
    2022-10-19
  • java如何执行(命令执行)
    执行java文件方法:(相关视频教程推荐:java视频教程)使用环境:jdk1.6文件目录:javac *.java会生成对应的*.class文件java *.class就可以执行了,.class可以省略t.java中是没有包的public...
    99+
    2019-10-16
    java
  • 一文看懂python如何执行cmd命令
      概要   “ 在进行Python编程时,经常需要使用到操作系统的命令行,这就要求我们学会如何使用Python执行cmd命令。”   Python执行cmd命令的几种方法   Python是一种强大而灵活的编程语言,它可以很方便地执行...
    99+
    2023-09-03
    python 开发语言
  • java中如何执行xshell命令
    目录java执行xshell命令实例Xshell启动java项目脚本(标本参考)项目启动脚本java执行xshell命令 实例 import java.io.BufferedRead...
    99+
    2022-11-13
  • 如何在cmd命令界面运行java程序
    打开自己的记事本,录入下面的代码import java.util.*; public class HelloWorld{ public static void main(String[] args){ System.out.pr...
    99+
    2019-11-24
    java入门 java 程序 运行 cmd 命令界面
  • shell如何以root帐户执行上一条命令
    这篇文章给大家分享的是有关shell如何以root帐户执行上一条命令的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。以 root 帐户执行上一条命令。$sudo !!其中...
    99+
    2022-10-19
  • C#如何实现执行CMD命令并接收返回结果
    这篇文章主要介绍C#如何实现执行CMD命令并接收返回结果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最近工作的时候发现软件里面通过查询ARP表查询某一IP对应的ARP条目的时,概率性出现查询到的ARP条目为空,一开...
    99+
    2023-06-14
  • java在linux本地如何执行shell命令
    这篇文章主要讲解了“java在linux本地如何执行shell命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java在linux本地如何执行shell命令”吧!一.以springboot...
    99+
    2023-06-29
  • java执行linux命令报错如何解决
    在Java中执行Linux命令时报错可能有多种原因,下面是一些常见的问题和解决方法:1. 权限问题:Java程序执行命令时可能没有足...
    99+
    2023-09-22
    java linux
  • linux中如何重复执行一条命令直至运行成功
    这篇文章主要介绍linux中如何重复执行一条命令直至运行成功,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!解决重复性的工作,自然而然会想到循环 。在 Shell 里,循环无非 3 种:for、while、until ...
    99+
    2023-06-16
  • shell脚本如何实现同时多台远程主机执行命令
    这篇文章主要介绍shell脚本如何实现同时多台远程主机执行命令,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实现需求在对单台机器做操作时我们会用“ssh ip”的方式登录到机器上,可以写这样一个工具vssh ip1,...
    99+
    2023-06-09
  • java如何使用Apache commons codec进行MD5加密,BASE64加密解密,执行系统命令
    这篇文章将为大家详细讲解有关java如何使用Apache commons codec进行MD5加密,BASE64加密解密,执行系统命令,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。编写代码之前先来介绍一下...
    99+
    2023-05-30
    java apache
  • Weblogic如何修复"Java反序列化"过程远程命令执行漏洞
    小编给大家分享一下Weblogic如何修复"Java反序列化"过程远程命令执行漏洞,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!查找文档说明,在https://support.oracle.com上找到...
    99+
    2023-06-04
  • 在Java中如何确保在多线程情况下,所有线程都完成再继续执行任务?
    1.使用awaitTermination         awaitTermination是executorService自带的方法,用来确保所有的线程任务都执行完毕。 例如下使用线程池来执行100个不同的 SQL 语句,将查询结果存储在...
    99+
    2023-09-24
    servlet
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作