Unity Editor実行時にUnity外で何か処理を走らせたい!ということがありますよね?🤗(ほんまか?
そこで今回はProject外で何かしらのファイルを操作したいときについての話を書いていこうと思います!(備忘録もかねて

基本的には流れとしては、EditorScriptからbatを起動させるだけです。
が、Unity起動後にUnity以外からProject内のファイルを操作すると何かと面倒です。

そこで、Editor起動直後、Unityが動き出す前に何かする方法はないのかと探し回るわけですが、なんと!!
ありがたいことにUnityさんがInitializeOnLoadという属性を用意して下さってます🙏

https://docs.unity3d.com/ja/2019.4/Manual/RunningEditorCodeOnLaunch.html

というわけで

using System;
using System.IO;
using System.Diagnostics;
using UnityEditor;
using UnityEngine;

namespace Hogehoge
{
    [InitializeOnLoad]
    public class Startup
    {
        private static readonly string batPath = Application.dataPath + "/hoge.bat";
        private static Process p;
        
        static Startup()
        {
            if (canDo)
            {
                ExecuteBat();
                AssetDatabase.Refresh();
            }
        }
        
        private static void ExecuteBat()
        {
            p = new Process();
            p.StartInfo.FileName = batPath;
            p.StartInfo.Verb = "RunAs";
            p.StartInfo.UseShellExecute = true;
            p.Start();
            p.WaitForExit();  //これを忘れると処理終了を待たずに何回も実行されることになるので注意
        }
    }
}

これだけでbatをEditor起動直後に実行させられます。バンザイ
注意点は、WaitForExit()を入れることぐらいですかね。これ忘れると悲惨です。

以上です!