再次感叹下程序的魅力,节省了太多的成本。
开发中需要用到Criware插件cpk类型的视频文件,没有cpk文件,只能找工具进行转化,墙了好久才找到一款工具,但是奈何工具只能单个单个文件的操作,而且需要手动命名,八百个文件,不谈时间,耐心也不够用,所以想到写批处理执行应用程序来实现自动化解决问题。
由于没有操作过其他程序,所以这里只拿这个举例......可能不尽相同
那么面临的第一个问题就是程序里面用到的参数,怎么去赋值传递。首先看一下该程序的目录文件以及界面:
其中有两个exe应用程序文件,运行程序1即可打开程序界面,然后进行操作,但是运行程序2只有弹窗一闪而过,并不知道什么效果,这个时候我们可以在控制台里面运行下看:
注意框中的地方,这个地方直接告诉了我们语法用法,我们可以很清楚的看出来可视化界面需要的各个参数是按照怎么的规则传递的,测试一下:
操作成功,用法是正确的。
批处理命令我们已经知道,那么接下来只需要写程序分别给批处理命令传入上述的参数(<Input CSV File or Directory>,<Output CPK File>)即可。由于该程序的操作对象为文件夹,但是源文件是没有单一文件夹的,所以需要给每个文件创建对应的文件夹,然后再进行批处理,不会这么复杂的bat语句...所以这一步写在c#里面,然后通过c#调用bat程序,代码如下,工具就不考虑代码优化了:
static void CreatCpk()
{
#region 遍历文件夹下所有文件,创建同名文件夹,移动文件到对应文件夹
string cpkDir = @"E:\Work\Tmp\movie";
string[] allFile = Directory.GetFiles(cpkDir);//获取所有文件,绝对路径
for (int i = 0; i < allFile.Length; i++)
{
string filenameWithoutExtension = Path.GetFileNameWithoutExtension(allFile[i]);//获取文件名无后缀,创建文件夹需要
string filename = Path.GetFileName(allFile[i]);//获取文件名有后缀,移动文件使用
string fileDir = Path.Combine(cpkDir, filenameWithoutExtension);//创建的文件夹名
if (!Directory.Exists(fileDir))
{
Directory.CreateDirectory(fileDir);
}
string toFilePath = Path.Combine(fileDir, filename);//移动的目标文件名
File.Move(allFile[i], toFilePath);//移动
}
#endregion
#region 将上步创建的文件夹作为参数传递给批处理程序,执行批处理程序
string cpkFileDir = @"E:\Work\Tmp\CpkOutPut";//cpk文件输出路径文件夹
if (Directory.Exists(cpkFileDir))
Directory.Delete(cpkFileDir, true);//删除文件夹以及文件夹下文件
Directory.CreateDirectory(cpkFileDir);
string[] allDir = Directory.GetDirectories(cpkDir);//获取所有文件夹,上步创建的文件夹
for (int i = 0; i < allDir.Length; i++)
{
string dirPath = allDir[i];//文件夹路径,绝对路径
//Console.WriteLine(dirPath);
string dirName = Path.GetFileName(dirPath);//文件夹名
//Console.WriteLine(dirName);
string targetFileName = Path.Combine(cpkFileDir, $"{dirName}.cpk");//需要生成的目标文件
//Console.WriteLine(targetFileName);
Process process = new Process();//调用批处理程序
string targetDir = @"C:\Users\59821\Desktop";//bat程序所在的文件夹
process.StartInfo.WorkingDirectory = targetDir;
process.StartInfo.FileName = "cpkBuild.bat";//批处理文件名
process.StartInfo.Arguments = $"{dirPath}={targetFileName}";//传入参数,以=隔开(规定如此),对应批处理里面的%1,%2....%9
process.StartInfo.CreateNoWindow = false;
process.Start();//启动
//process.WaitForExit();
}
#endregion
}
然后在bat中接受参数,执行语句即可,可以看到上述传入的参数以“=”隔开,分别作为一个参数,而且bat中,这些参数依次赋值给%1,%2...%9。bat语句如下,比较简单
rem @echo off
::测试输出
echo %1
::测试输出
echo %2
::进入d盘
d:
::进入程序所在路径
cd D:\CpkBuildTool\crifilesystem
::执行程序定义语句
cpkmakec %1 %2
这样就实现了自动化操作,本来可能需要耗费大量精力时间的操作,交给程序,一分钟不到就解决了。
不晓得其他程序的用法是不是也是可以这样找出来。记录一下。