c#教程https://www.xin3721.com/eschool/CSharpxin3721/
这篇文章主要介绍了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(); } |