最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java如何連續(xù)執(zhí)行多條cmd命令

 更新時(shí)間:2021年08月11日 08:48:16   作者:薛8  
這篇文章主要介紹了java如何連續(xù)執(zhí)行多條cmd命令的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java連續(xù)執(zhí)行多條cmd命令

命令之間用&連接

例如:

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

java ssh登錄執(zhí)行多條cmd命令

java登錄ssh執(zhí)行多條命令,解決出現(xiàn)more自動(dòng)回車的問題

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 });
 
	/**
	 * ESC
	 */
	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 });
 
	/**
	 * 某些設(shè)備回顯數(shù)據(jù)中的控制字符
	 */
	private static final String[] PREFIX_STRS = { BACKSPACE + "+" + BLANKSPACE + "+" + BACKSPACE + "+",
			"(" + ESC + "\\[\\d+[A-Z]" + BLANKSPACE + "*)+" };
 
	private int sleepTime = 200;
 
	/**
	 * 連接超時(shí)(單次命令總耗時(shí))
	 */
	private int timeout = 4000;
 
	/**
	 * 保存當(dāng)前命令的回顯信息
	 */
	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);
	}
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Gateway網(wǎng)關(guān)源碼解析

    Gateway網(wǎng)關(guān)源碼解析

    這篇文章主要介紹了Gateway微服務(wù)網(wǎng)關(guān),負(fù)載均衡,熔斷和限流,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • java學(xué)習(xí)筆記_關(guān)于字符串概述

    java學(xué)習(xí)筆記_關(guān)于字符串概述

    下面小編就為大家?guī)硪黄猨ava學(xué)習(xí)筆記_關(guān)于字符串概述。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • spring boot過濾器FilterRegistrationBean實(shí)現(xiàn)方式

    spring boot過濾器FilterRegistrationBean實(shí)現(xiàn)方式

    這篇文章主要介紹了spring boot過濾器FilterRegistrationBean實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • java數(shù)據(jù)隨機(jī)分頁實(shí)現(xiàn)方案

    java數(shù)據(jù)隨機(jī)分頁實(shí)現(xiàn)方案

    本文主要介紹了java數(shù)據(jù)隨機(jī)分頁實(shí)現(xiàn)方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java轉(zhuǎn)義字符詳細(xì)介紹

    Java轉(zhuǎn)義字符詳細(xì)介紹

    這篇文章主要介紹了Java轉(zhuǎn)義字符的相關(guān)資料,包括換行符、回車符、換頁符、退格符、空字符、空格、制表符、單引號(hào)、雙引號(hào)、反斜杠以及八進(jìn)制和十六進(jìn)制字符,通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • 詳解Java如何創(chuàng)建Annotation

    詳解Java如何創(chuàng)建Annotation

    在本文中,我們將介紹注解的基礎(chǔ)知識(shí),包括注解是什么,它們?nèi)绾卧谑纠惺褂茫约叭绾翁幚硭鼈?。下面和小編一起來學(xué)習(xí)吧
    2019-05-05
  • Struts2中異常處理機(jī)制分析

    Struts2中異常處理機(jī)制分析

    這篇文章主要介紹了Struts2中異常處理機(jī)制分析,涉及到了聲明式異常捕捉的相關(guān)內(nèi)容,以及兩種異常映射的分析,需要的朋友可以參考下。
    2017-09-09
  • java Person,Student,GoodStudent 三個(gè)類的繼承、構(gòu)造函數(shù)的執(zhí)行

    java Person,Student,GoodStudent 三個(gè)類的繼承、構(gòu)造函數(shù)的執(zhí)行

    這篇文章主要介紹了java Person,Student,GoodStudent 三個(gè)類的繼承、構(gòu)造函數(shù)的執(zhí)行,需要的朋友可以參考下
    2017-02-02
  • Java 棧和隊(duì)列的相互轉(zhuǎn)換詳解

    Java 棧和隊(duì)列的相互轉(zhuǎn)換詳解

    棧和隊(duì)列,嚴(yán)格意義上來說,也屬于線性表,因?yàn)樗鼈円捕加糜诖鎯?chǔ)邏輯關(guān)系為 "一對(duì)一" 的數(shù)據(jù),但由于它們比較特殊,因此將其單獨(dú)作為一章,做重點(diǎn)講解
    2022-02-02
  • Maven如何打入依賴中指定的部分jar包

    Maven如何打入依賴中指定的部分jar包

    當(dāng)項(xiàng)目運(yùn)行的環(huán)境里已經(jīng)有一個(gè)jar包是pom文件依賴其他項(xiàng)目的jar包,所以最后得到的項(xiàng)目jar包中還需要打入其他項(xiàng)目的最新代碼,接下來通過本文給大家介紹Maven打入依賴jar包的操作工程,需要的朋友參考下吧
    2021-06-06

最新評(píng)論

涞源县| 商丘市| 盱眙县| 宜春市| 鸡泽县| 柳河县| 西峡县| 江门市| 江门市| 兴山县| 玉山县| 新源县| 静宁县| 桐乡市| 岳普湖县| 高州市| 赣榆县| 威信县| 岳普湖县| 恩施市| 潞西市| 闸北区| 舟山市| 章丘市| 鹤壁市| 云南省| 稷山县| 康平县| 应用必备| 黑水县| 毕节市| 敦煌市| 福清市| 灵山县| 义马市| 平度市| 宁强县| 得荣县| 保靖县| 全椒县| 吉木萨尔县|