可惜最后没用上,留个记录纪念以下
代码如下:
#include<filesystem>
#include<iostream>
#include<Windows.h>
#include<process.h>
using namespace std;
using namespace std::filesystem;
#define DIRECTORY_SUCCESS 0x1
#define DIRECTORY_EXIST 0x11
#define DIRECTORY_NAME_FAULT 0x20
#define DIRECTORY_CREATE_FAILED 0x30
#define IS_DIRECTORY_SUCCESS(R) ((R&0x1)?true:false)
template<typename T>
void printError(std::initializer_list<T> args) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
for (auto error : args) {
cout << "Error: " << error << endl;
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
int mCreateDirectory(path mDirectoryName) {
if (exists(mDirectoryName)) {
printError({ "输出文件夹已存在....不再创建新文件夹...." });
return DIRECTORY_EXIST;
}
if (!create_directory(mDirectoryName)) {
printError({ "文件夹创建失败...." });
return DIRECTORY_CREATE_FAILED;
}
return DIRECTORY_SUCCESS;
}
#define PCF_ID_CODE 0x1
#define SIGMAKE_ID_CODE 0x2
#define ERROR_ID_CODE 0x0
int getExeFileIDCode(path exefile) {
if (exefile.replace_extension("").compare("pcf") == 0) {
return PCF_ID_CODE;
}
if (exefile.replace_extension("").compare("sigmake") == 0) {
return SIGMAKE_ID_CODE;
}
return ERROR_ID_CODE;
}
void pcfHandler(path infolder, path outfolder) {
path objfile = "";
string input = "";
string output = "";
for (const auto& entry : directory_iterator(infolder)) {
objfile = entry.path();
if (objfile.extension().compare(".lib")&& objfile.extension().compare(".obj")) {
continue;
}
input = objfile.string();
output = outfolder.string() + "\\" + objfile.stem().string() + ".pat";
_execl("pcf", "pcf", input.c_str(), output.c_str(),NULL);
}
}
void sigmakeHandler(path infolder, path outfolder) {
path patfile = "";
string input = "";
string output = "";
for (const auto& entry : directory_iterator(infolder)) {
patfile = entry.path();
if (patfile.extension().compare(".pat")) {
continue;
}
input = patfile.string();
output = outfolder.string() + "\\" + patfile.stem().string() + ".sig";
_execl("sigmake", "sigmake", input.c_str(), output.c_str(), NULL);
}
}
int main(int argc,char *argv[]) {
#ifdef DEBUG
#endif // DEBUG
while (!IsDebuggerPresent())
{
Sleep(5 * 1000);
}
if (argc != 4) {
printError({ "************************输入格式错误********************************" ,
"----------输入格式: batch.exe 处理程序.exe 被处理的文件夹----------" });
}
path exefile = argv[1];
//去掉扩展名和路径
exefile.stem();
path infolder = argv[2];
path outfolder = argv[3];
if (!IS_DIRECTORY_SUCCESS(mCreateDirectory(outfolder))) {
return -1;
}
if (!exists(infolder)) {
printError({ "输入文件夹不存在" });
return -1;
}
switch (getExeFileIDCode(exefile))
{
case PCF_ID_CODE:
pcfHandler(infolder, outfolder);
break;
case SIGMAKE_ID_CODE:
sigmakeHandler(infolder, outfolder);
break;
default:
break;
}
return 0;
}