Unity C#执行bat脚本的操作

c#教程Unity C#执行bat脚本的操作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();

    }

上一篇:UNITY 旋转查看物体


下一篇:Unity中使用Google.Protobuf3,获取dll文件