Unity 内部执行cmd命令行
概述
有些情况下我们需要在 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命令行相关推荐
- 【TypeScript】通过node-cmd使用代码,执行cmd命令行
使用第三方库 node-cmd 执行 cmd 命令行命令 具体实现代码如下: const cmdShell = require('node-cmd')async function cmd(domain ...
- 命令行无法运行php,php不支持执行cmd命令行
php不支持执行cmd命令行是因为你没有关闭php配置文件中的安全模式. 在php.ini文件中配置safe_mode参数支持命令执行的方法: 首先,打开php.ini,关掉安全模式safe_mode ...
- mysql sql执行cmd命令行_命令行执行MySQL的sql文件
在项目开发过程中, 可能存在数据库导入导出,如果文件过大,会发现通过数据库(MySQL等)管理工具进行文件导入会报错,超出最大文件的限制. 需要更改工具的文件大小限制,网上有很多教程,比较麻烦,这里介 ...
- python执行cmd命令行异步执行_Python 异步调用命令行工具
当你在自己的 Python 程序中采用了基于事件循环的异步编程方法之后,你就会发现自己不自觉地被其牢牢吸引住,并不是说这一方法多么棒,而是因为你不得不想办法保证程序中的任意环节都不能是阻塞的! 例如当 ...
- cmd 命令行方式执行 matlab 脚本
0. matlab 命令行 删除当前输入的行 ctrl + u 或者 esc 1. 命令行执行脚本 首先设置环境变量,将 matlab.exe 添加到环境变量 Path 中,比如我的 matlab 2 ...
- 【adb】cmd命令行输入adb时始终提示adb为非内部命令
问题描述: 1.安装好了adb 并且已经在计算机中配置好了环境变量,但是打开cmd命令时始终提示adb非内部命令 解决办法: 1.找到adb安装包 2.找到cmd命令位置(C:\Windows\Sys ...
- 执行cmd命令提示不是内部或外部命令
有时我们在执行cmd命令会提示不是内部或外部命令,也不是可运行的程序 注册文件时一闪而过可以在bat文件中添加一行代码 pause,用于输出错误信息 解决方案 1.第一种方法 找到C:\Windows ...
- 解决 CMD 命令行【不是内部或外部命令,也不是可运行的程序】或者【发生系统错误,拒绝访问】
我们有时候使用 cmd 命令行,会遇到如下错误: XX不是内部或外部命令,也不是可运行的程序.或者"发生系统错误,拒绝访问".怎么办? 是因为我们使用的是普通用户的权限[Users ...
- cmd 命令行执行 Python 脚本
目录 前言 1 在命令行执行脚本的前提 2 方法 2.1. Win + R 打开 cmd 2.2. 右键打开 cmd 2.3. 拖拽脚本文件 总结 前言 提示:这里可以添加本文要记录的大概内容: 学习 ...
最新文章
- php 读取 stl 文件,科学网—[转载]【源码】读取ASCII STL文件的STLReader - 刘春静的博文...
- PULSE:一种基于隐式空间的图像超分辨率算法
- python基础语法 第3关_Python基础语法 第3节课 (列表)
- android 系统(34)--关机充电图标修改
- QT实现头像图片剪切框
- 【运动学】基于matlab斜抛物体水平射程+竖直射高【含Matlab源码 979期】
- W3CSchool离线文档下载
- 什么是软件设计模式?
- ubuntu14.04不能上网
- bzoj2101[Usaco2010 Dec]Treasure Chest 藏宝箱 DP
- Java实现DOC文件转DOCX文件
- Docker学习笔记1
- 第一课:两种方法教你如何注册小程序账号
- Hulu推荐:小众又新颖的综艺
- 百度西雅图开设AI实验室 总裁张亚勤称AI是时代变革之能
- 智慧仓储:打造仓储管理一张图
- c语言第九章课后作业答案,c语言第九章习题带答案
- 会议服务与管理【2】
- 关于提取百度文库无法复制的正文内容方法
- python 概念,关系
热门文章