这篇文章主要介绍了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();
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持得得之家。如有错误或未考虑完全的地方,望不吝赐教。
沃梦达教程
本文标题为:Unity C#执行bat脚本的操作
基础教程推荐
猜你喜欢
- C#类和结构详解 2023-05-30
- ZooKeeper的安装及部署教程 2023-01-22
- 一个读写csv文件的C#类 2022-11-06
- C# windows语音识别与朗读实例 2023-04-27
- C#控制台实现飞行棋小游戏 2023-04-22
- linux – 如何在Debian Jessie中安装dotnet core sdk 2023-09-26
- C# List实现行转列的通用方案 2022-11-02
- unity实现动态排行榜 2023-04-27
- winform把Office转成PDF文件 2023-06-14
- C# 调用WebService的方法 2023-03-09