Unity C#执行bat脚本的操作

我们先封装一下接口,如下,把EdtUtil.cs放置在Assets/Editor目录中

// EdtUtil.cs
using System;
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Text;
class EdtUtil
{
    public static System.Diagnostics.Process CreateShellExProcess(string cmd, string args, string workingDir = "")
    {
        var pStartInfo = new System.Diagnostics.ProcessStartInfo(cmd);
        pStartInfo.Arguments = args;
        pStartInfo.CreateNoWindow = false;
        pStartInfo.UseShellExecute = true;
        pStartInfo.RedirectStandardError = false;
        pStartInfo.RedirectStandardInput = false;
        pStartInfo.RedirectStandardOutput = false;
        if (!string.IsNullOrEmpty(workingDir))
            pStartInfo.WorkingDirectory = workingDir;
        return System.Diagnostics.Process.Start(pStartInfo);
    }

    public static void RunBat(string batfile, string args, string workingDir = "")
    {
        var p = CreateShellExProcess(batfile, args, workingDir);
        p.Close();
    }

    public static string FormatPath(string path)
    {
        path = path.Replace("/", "\\");
        if (Application.platform == RuntimePlatform.OSXEditor)
            path = path.Replace("\\", "/");
    }
}

现在,我们在工程Assets外层有一个batFiles目录,里面有一个gen_client_cfg.bat脚本

我们想通过Unity菜单执行这个脚本,例

using UnityEngine;
using UnityEditor;

class Test
{
    private static void RunMyBat(string batFile,string workingDir)
    {
        var path = EdtUtil.FormatPath(workingDir);
        if (!System.IO.File.Exists(path))
        {
            GameLogger.LogError("bat文件不存在:" + path);
        }
        else
        {
            EdtUtil.RunBat(batFile, "", path);
        }
    }

    [MenuItem("Tools/执行gen_client_cfg.bat")]
    private static void Run()
    {
        // 执行bat脚本
        RunBat("gen_client_cfg.bat", Application.dataPath + "/../batFiles/");
    }
}

点击菜单 【Tools】-【执行gen_client_cfg.bat】即可在Unity中直接执行bat脚本了

补充:unity运行bat文件并隐藏cmd窗口

懒散几年了,今天重拾学习计划。

Unity中调用bat文件的方法和因此cmd窗口的设置:

需要添加库

using System.Diagnostics;

方法代码:

public static System.Diagnostics.Process CreateShellExProcess(string cmd, string args, string workingDir = "")
    {
        var pStartInfo = new System.Diagnostics.ProcessStartInfo(cmd);
        pStartInfo.Arguments = args;
        pStartInfo.CreateNoWindow = false;
        pStartInfo.UseShellExecute = true;
       // pStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        pStartInfo.RedirectStandardError = false;
        pStartInfo.RedirectStandardInput = false;
        pStartInfo.RedirectStandardOutput = false;
        if (!string.IsNullOrEmpty(workingDir))
            pStartInfo.WorkingDirectory = workingDir;
        return System.Diagnostics.Process.Start(pStartInfo);
    }
    public  void RunBat(string batfile, string args, string workingDir = "")
    {
        var p = CreateShellExProcess(batfile, args, workingDir);
        p.Close();
    }

上面代码注释掉的那行就是隐藏窗口的方法。需要注意的是:

如果proc.StartInfo.UseShellExecute为false,使用:

proc.StartInfo.CreateNoWindow = true;

如果proc.StartInfo.UseShellExecute为true,通过以下方式为进程进行设置:

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

关闭开启的程序代码:

static System.Diagnostics.Process CreateShellExProcess(string cmd, string args, string workingDir = "")
 {
        var pStartInfo = new System.Diagnostics.ProcessStartInfo(cmd);
        pStartInfo.Arguments = args;
        pStartInfo.CreateNoWindow = false;
        pStartInfo.UseShellExecute = true;
        pStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        pStartInfo.RedirectStandardError = false;
        pStartInfo.RedirectStandardInput = false;
        pStartInfo.RedirectStandardOutput = false;
        if (!string.IsNullOrEmpty(workingDir))
            pStartInfo.WorkingDirectory = workingDir;
        return System.Diagnostics.Process.Start(pStartInfo);
    }
    public void RunBat(string batfile, string args, string workingDir = "")
    {
        var p = CreateShellExProcess(batfile, args, workingDir);
        p.Close();
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • 如何保存Unity中的Log日志

    代码中的debug日志保存本地 using System.Collections; using UnityEngine; using System.IO; public class SaveLog : MonoBehaviour { private float length; Queue queue; private void Awake() { DontDestroyOnLoad(this); LogToFile("Version of the runtime: " + Applic

  • Unity 如何通过反射给gameObject添加组件

    C#版本 public static Component AddComponent(GameObject go, string assembly, string classname) { var asmb = System.Reflection.Assembly.Load(assembly); var t = asmb.GetType(assembly + "." + classname); if(null != t) return go.AddComponent(t); else r

  • Unity 实现删除missing脚本组件

    通过Resources.FindObjectsOfTypeAll查找所有GameObject,然后通过.hideFlags == HideFlags.None判断是否为存在于Hierarchy面板.(此为编辑器脚本) 详细代码: /******************************************************************************* * 版本声明:v1.0.0 * 类 名 称:DeleteMissingScripts * 创建日期:8/10

  • unity android设备上查看log输出方式

    使用[adb] logcat [option] - [filter-spec] - 命令. 1. -s 指定过滤器 adb logcat -s Unity ActivityManager PackageManager dalvikvm DEBUG 2. 如果出现error: more than one device/emulator,需要adb -s deviceName指定设备 adb devices 得到设备名 MyAndroid adb -s MyAndroid logcat -s Uni

  • Unity PC版Log的具体位置介绍

    在某个版本更新后,Unity Log不在位于Data文件夹中 具体位置: C:\Users\xxx用户\AppData\LocalLow\xx公司\xx项目 补充:UnityWebPlayer 的log日志的本地路径 在unity网页端的开发中,常常用到UnityWebPlayer的技术进行制作.在Unity中我们可以通过引擎自带的日志输出工具进行调试. 网页端在哪里查看log日志呢? 就在本地的此路径下 C:\Users\Administrator\AppData\Local\Temp\Uni

  • unity实现物体延时出现

    本文实例为大家分享了unity实现物体延时出现的具体代码,供大家参考,具体内容如下 新建一个cube和plane,隐藏cube,脚本挂在plane上. 1. update计时器实现 using System.Collections; using System.Collections.Generic; using UnityEngine; //一个隐藏的物体等待t秒后显示,updata计时器实现 public class activeShow : MonoBehaviour { public Ga

  • Unity 按钮添加OnClick事件操作

    1.在Hierarchy面板右键UI>Button 2.创建一个空物体 3.创建一个脚本 ButtonClick.cs,定义一个Click方法(必须为Public) 4.把脚本挂在到空物体上 5.将空物体拖到如下图 None(Object) 位置 6.在右侧选择 ButtonClick>Click 方法 7.如下 补充:Unity三种添加Click事件 我就废话不多说了,大家还是直接看代码吧~ public Button btn; void Start () { // 一.btn.onClic

  • Unity C#执行bat脚本的操作

    我们先封装一下接口,如下,把EdtUtil.cs放置在Assets/Editor目录中 // EdtUtil.cs using System; using UnityEditor; using UnityEngine; using System.Collections.Generic; using System.IO; using System.Threading; using System.Text; class EdtUtil { public static System.Diagnosti

  • Windows 2008任务计划执行bat脚本失败返回0x1的解决方法

    测试环境: C:\>systeminfo | findstr /c:"OS Name" OS Name: Microsoft Windows Server 2008 R2 Enterprise 很多人在Windows 2008里面创建任务计划执行bat文件的时候都会遇到这样的问题:任务计划执行之后返回的状态码是0x1而不是正常的0x0 我今天也被这个问题给坑了,几乎花了一天的时间来排错.单独执行bat脚本一切正常,在Windows 2003的任务计划里面执行bat脚本也没有问题,

  • windows下定时利用bat脚本实现ftp上传下载

    前言: 工作中可能会遇到以下情况,利用windows作为中转,来实现两台linux服务器的文件传输. 实现步骤: 1.FTP上传和下载的bat脚本. 脚本分为两部分:可执行bat脚本和ftp命令文件: 可执行bat脚本: @echo off ftp -s:D:\ftp\ftp.txt ftp命令ftp.txt: open 192.168.1.166 ftp-user passwd prompt off lcd D:\ftp cd /home/myftp mget * close open 10.

  • Java 执行CMD命令或执行BAT批处理方式

    Java 执行CMD命令或执行BAT批处理 背景 日常开发中总能遇到一些奇怪的需求,例如使用java执行cmd命令或者bat批处理文件,今天就简单记录一下使用过程. 使用 废话不多说直接上代码 import java.io.BufferedReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; public class Cmder { /** * 执行一个cm

  • Windows自动执行python脚本操作步骤

    目录 运行Python脚本:.bat文件 python脚本 bat运行经验 定时在Windows中触发.bat文件 上一篇自动在Windows中运行Python脚本并定时触发功能实现传送门链接 运行Python脚本:.bat文件 在Windows中,.bat文件是批处理文件,是与Linux中.sh(shell)文件很像的东西. 如果,我们想在Windows中运行一个Python脚本,我们可以通过CMD,首先进入python文件所在的目录,之后运行. 但是这样很麻烦,每次都要打开CMD,进入文件夹

  • 详解python执行shell脚本创建用户及相关操作

    用户发送请求,返回帐号和密码 ###利用框架flask 整体思路: # 目的:实现简单的登录的逻辑 # 1需要get和post请求方式 需要判断请求方式 # 2获取参数 # 3执行shell # 4如果判断都没问题,就返回结果 导包 ... 给模版传递消息 用flash --需要对内容加密,因此需要设置 secret_key , 做加密消息的混淆 app = Flask(__name__) app.secret_key = 'kingdomai' 使用wtf实现表单,需要自定义一个表单类 #va

  • Bat脚本处理ftp超强案例分析

    前言: 公司有几百台windows服务器,每次程序更新,如果是一台台拷数据,只怕安排十个人,一天都不一定做得完,所以就必须研究个全自动更新方案来,于是就想到了FTP,做个主FTP站,在几百台客户机上启动BAT脚本,每30秒检测一次,如果主站有更新程序,就自动下载更新,几分钟内,上400台windows服务器,都可以全自动更新程序完毕,相当实用,现把当初研究BAT的脚本思路贴出来,希望对大批量运维人员一个方向.当然,批量更新服务器,每个公司有它自己的解决办法,这个BAT的方式不是最优的,可以用sh

  • Unity延时执行的多种方法小结

    目录 Update计时器 Invoke 协程 DoTween 最开始接触unity的时候,我做延时都是在update里做计时器.后来才发现,我屮艸芔茻,还有这么多种更方便延时执行的方式.现在我们就来捋一捋. 本文列举的有以下四种,如有错漏,欢迎补充指正 ✨ Update Invoke 协程 DoTween 支持参数传入 ✖️ ✖️ ✔️ ✖️ 下表是在不同情况下各方案的执行状态 ✨ Update Invoke 协程 DoTween Time.timeScale = 0 ✔️ ✖️ ✖️ ✔️ a

  • Windows环境bat脚本获取文件的创建时间

    windows环境获取时间相关概念 1.windows下DOS窗口date格式 针对date的结果将其进行格式化显示,如:YYYY-MM-DD 就要进行如下操作: 日期截取遵从格式 %date:~x,y%,表示从第x位开始,截取y个长度(x,y的起始值为0) 年份从第0位开始截取4位,月份从第5位开始截取2位,日期从第8位开始截取2位 2.windows下DOS窗口time格式 针对time的结果将其进行格式化显示,如:HH:MM:SS就要进行如下操作: 时间截取遵从格式 %time:~x,y%

  • Tomcat starup.bat脚本开机自启动的实现

    目录 1:在tomcat bin目录下修改catalina.bat文件 2:如果需要tomcat启动后窗口不关闭,则需要在tomcat bin目录下修改startup.bat文件 3:在tomcat bin目录下修改setclasspath.bat文件 4:编写bat启动脚本 5:把编写的bat脚本放到C盘开机自启动程序目录下面 tomcat是非常流行的web服务器,当我们使用tomcat作为项目开发时,经常就是直接运行bin目录下的startup.bat,以cmd命令窗口的形式启动服务.这是开

随机推荐