我是靠谱客的博主 轻松宝马,这篇文章主要介绍Unity C#执行bat脚本的操作,现在分享给大家,希望可以做个参考。

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 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菜单执行这个脚本,例

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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窗口的设置:

需要添加库

复制代码
1
using System.Diagnostics;

方法代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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,使用:

复制代码
1
proc.StartInfo.CreateNoWindow = true;

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

复制代码
1
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

关闭开启的程序代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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脚本的操作的全部内容,更多相关Unity内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(160)

评论列表共有 0 条评论

立即
投稿
返回
顶部