概述

有些情况下我们需要在 unity 中借助命令行来执行某些特殊操作;

当然,不建议把这种方法用在其他奇怪的地方;

实现方式是使用 c#自带的 System.Diagnostics 库来实现运行 cmd 命令行

Process 方法

ProcessStartInfo

ProcessStartInfo 使用它来设置进程参数,为后续启动进程做准备;

以下是一些重要的属性

属性名 作用
Arguments 第二参数
CreateNoWindow 是否显示程序运行的窗口,true 为不显示
UseShellExecute 使用 shell 执行,这里必须填 false,不然报错
RedirectStandardError 是否重定向标准错误输出
RedirectStandardInput 是否重定向标准输入
RedirectStandardOutput 是否重定向标准输出
StandardErrorEncoding 标准错误输出时使用的编码
StandardOutputEncoding 标准输出时使用的编码

System.Text.Encoding 设置编码,请注意系统是需要 UTF-8 编码还是 gb2312,我这边使用 gb2312 才能正常显示否则乱码!
注意:以下代码都是导入 System.Diagnostics 库后编写!!!

// cmd 表示第一个参数
// args 表示第二个参数,可以置空
// dir 为命令行运行的目录,默认置空
private static Process createCmdProcess(string cmd, string args, string dir = null)
{// 设置进程参数var p = new ProcessStartInfo(cmd);p.Arguments = args;p.CreateNoWindow = true;p.UseShellExecute = false;p.RedirectStandardError = true;p.RedirectStandardInput = true;p.RedirectStandardOutput = true;p.StandardErrorEncoding = System.Text.Encoding.GetEncoding("gb2312");p.StandardOutputEncoding = System.Text.Encoding.GetEncoding("gb2312");// 判断工作目录是否为空,如果非空那么就设置工作目录if (!string.IsNullOrEmpty(dir)){p.WorkingDirectory = dir;}// 一切就绪,启动进程!return Process.Start(p);
}

封装 Process

我们使用一个字符串数组获取标准输出以及标准错误输出,即可拿到我们命令行执行的结果;

// 执行cmd命令行的方法
public static string[] runCmd(string cmd, string args, string dir = null)
{string[] res = new string[2];var p = createCmdProcess(cmd, args, dir);// 获取标准输出与错误输出,存到string里面res[0] = p.StandardOutput.ReadToEnd();res[1] = p.StandardError.ReadToEnd();// 进程执行完毕记得关掉p.Close();return res;
}

完整封装代码

将以上两块代码封装成为一个文件,便于我们后续调用!

CmdRunner.cs 代码清单

using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;public class CmdRunner : MonoBehaviour
{public static string[] runCmd(string cmd, string args, string dir = null){string[] res = new string[2];var p = createCmdProcess(cmd, args, dir);res[0] = p.StandardOutput.ReadToEnd();res[1] = p.StandardError.ReadToEnd();p.Close();return res;}private static Process createCmdProcess(string cmd, string args, string dir = null){var p = new ProcessStartInfo(cmd);p.Arguments = args;p.CreateNoWindow = true;p.UseShellExecute = false;p.RedirectStandardError = true;p.RedirectStandardInput = true;p.RedirectStandardOutput = true;p.StandardErrorEncoding = System.Text.Encoding.GetEncoding("gb2312");p.StandardOutputEncoding = System.Text.Encoding.GetEncoding("gb2312");if (!string.IsNullOrEmpty(dir)){p.WorkingDirectory = dir;}return Process.Start(p);}
}

实践案例

本案例使用上一节编写的封装代码 CmdRunner.cs

正则获取地址

众所周知,ipconfig 可以获取很多地址,或者子网掩码之类的玩意;

因为获取的标准输出在 res[0] 里面,我们直接使用 Regex.Matches 进行正则匹配

然后 foreach 一把梭就拿到所有地址了

至于怎么通过字符串还是二次正则获取 ipv4/ipv6 地址,你们就再试试看吧,作者能力不行就不献丑了~

Unity 内部执行cmd命令行相关推荐

  1. 【TypeScript】通过node-cmd使用代码,执行cmd命令行

    使用第三方库 node-cmd 执行 cmd 命令行命令 具体实现代码如下: const cmdShell = require('node-cmd')async function cmd(domain ...

  2. 命令行无法运行php,php不支持执行cmd命令行

    php不支持执行cmd命令行是因为你没有关闭php配置文件中的安全模式. 在php.ini文件中配置safe_mode参数支持命令执行的方法: 首先,打开php.ini,关掉安全模式safe_mode ...

  3. mysql sql执行cmd命令行_命令行执行MySQL的sql文件

    在项目开发过程中, 可能存在数据库导入导出,如果文件过大,会发现通过数据库(MySQL等)管理工具进行文件导入会报错,超出最大文件的限制. 需要更改工具的文件大小限制,网上有很多教程,比较麻烦,这里介 ...

  4. python执行cmd命令行异步执行_Python 异步调用命令行工具

    当你在自己的 Python 程序中采用了基于事件循环的异步编程方法之后,你就会发现自己不自觉地被其牢牢吸引住,并不是说这一方法多么棒,而是因为你不得不想办法保证程序中的任意环节都不能是阻塞的! 例如当 ...

  5. cmd 命令行方式执行 matlab 脚本

    0. matlab 命令行 删除当前输入的行 ctrl + u 或者 esc 1. 命令行执行脚本 首先设置环境变量,将 matlab.exe 添加到环境变量 Path 中,比如我的 matlab 2 ...

  6. 【adb】cmd命令行输入adb时始终提示adb为非内部命令

    问题描述: 1.安装好了adb 并且已经在计算机中配置好了环境变量,但是打开cmd命令时始终提示adb非内部命令 解决办法: 1.找到adb安装包 2.找到cmd命令位置(C:\Windows\Sys ...

  7. 执行cmd命令提示不是内部或外部命令

    有时我们在执行cmd命令会提示不是内部或外部命令,也不是可运行的程序 注册文件时一闪而过可以在bat文件中添加一行代码 pause,用于输出错误信息 解决方案 1.第一种方法 找到C:\Windows ...

  8. 解决 CMD 命令行【不是内部或外部命令,也不是可运行的程序】或者【发生系统错误,拒绝访问】

    我们有时候使用 cmd 命令行,会遇到如下错误: XX不是内部或外部命令,也不是可运行的程序.或者"发生系统错误,拒绝访问".怎么办? 是因为我们使用的是普通用户的权限[Users ...

  9. cmd 命令行执行 Python 脚本

    目录 前言 1 在命令行执行脚本的前提 2 方法 2.1. Win + R 打开 cmd 2.2. 右键打开 cmd 2.3. 拖拽脚本文件 总结 前言 提示:这里可以添加本文要记录的大概内容: 学习 ...

最新文章

  1. php 读取 stl 文件,科学网—[转载]【源码】读取ASCII STL文件的STLReader - 刘春静的博文...
  2. PULSE:一种基于隐式空间的图像超分辨率算法
  3. python基础语法 第3关_Python基础语法 第3节课 (列表)
  4. android 系统(34)--关机充电图标修改
  5. QT实现头像图片剪切框
  6. 【运动学】基于matlab斜抛物体水平射程+竖直射高【含Matlab源码 979期】
  7. W3CSchool离线文档下载
  8. 什么是软件设计模式?
  9. ubuntu14.04不能上网
  10. bzoj2101[Usaco2010 Dec]Treasure Chest 藏宝箱 DP
  11. Java实现DOC文件转DOCX文件
  12. Docker学习笔记1
  13. 第一课:两种方法教你如何注册小程序账号
  14. Hulu推荐:小众又新颖的综艺
  15. 百度西雅图开设AI实验室 总裁张亚勤称AI是时代变革之能
  16. 智慧仓储:打造仓储管理一张图
  17. c语言第九章课后作业答案,c语言第九章习题带答案
  18. 会议服务与管理【2】
  19. 关于提取百度文库无法复制的正文内容方法
  20. python 概念,关系

热门文章

  1. Ubuntu切换到root用户,su认证失败
  2. 计算机网络期末复习题(华南理工mooc习题及解答)
  3. NPO与X7R、X5R、Y5V、Z5U的区别
  4. C++ MFC开发通用方法小结
  5. Excel VBA制做简易的Layout
  6. Azure云服务基础其四
  7. 降低延迟,视频直播APP要这样开发
  8. 前端知识点(更新中)
  9. 类似新浪微博动态发布时间转换机制,显示刚刚、几分钟前、几小时前、昨天、前天····
  10. 用计算机制作微课教学教案,用计算机写文章微课教案