扶她奶茶批量解密工具范例
秋月的私语吧
全部回复
仅看楼主
level 11
一楼上图:
2021年01月29日 01点01分 1
level 11
有时候在网上下载到批量的压缩包,密码相同,比如都是“扶她奶茶”,一个一个解压相当麻烦,因为有文件夹,所以也不能一次性选中文件夹解压,于是决定写个小工具,实现即使嵌套文件夹也能够批量自动解压,然后重新压缩!
这个工具没啥技术含量,仅仅作为范例,不提供工具下载谢谢!
确实需要的,可以与我联系。
2021年01月29日 01点01分 2
level 11
功能:
1.实现批量解压带密码的rar文件,并且重新压缩。
2.实现子文件夹的批量解压与重新压缩。
3.修改重新压缩的文件名为在原文件名末尾添加“未加密”。
4.使用4线程,同步处理,提高解密速度!
5.用户可以自定义批量压缩包的密码内容。
2021年01月29日 01点01分 3
level 11
核心代码:
//author:autumoon
//联系QQ:4589968
//日期:2021-01-29
bool CompressDir(const _tstring& stCurItem, const _tstring& stDstDir)
{
_tstring stCurDir(stCurItem);
//读取目录,如果目录下面只有一个目录,则更新目录
std::vector<_tstring> vSubDirs;
int nDirCount = getDirs(stCurItem, vSubDirs, false);
if (nDirCount == 1)
{
stCurDir = vSubDirs[0];
}
if(PathIsDirectory(stCurDir.c_str()))
{
//当前目录中创建百度快捷方式
_tstring st52slg;
if (g_bAddUrl)
{
st52slg = CStdStr::AddSlashIfNeeded(stCurDir) + "百度.url";
CreateShortCut(st52slg.c_str(), "http://www.baidu.com");
}
//处理文件夹
_tstring strDirName = CStdStr::GetNameOfDir(stCurDir);
_tstring strDstFile = CStdStr::AddSlashIfNeeded(stDstDir) + strDirName + g_stSuffix;
//有空格的时候,需要添加引号
strDstFile = CStdStr::AddQuoteIfContains(strDstFile);
if (g_b7z)
{
_tstring strCmd = "7z a " + strDstFile + " -mhe " + CStdStr::AddQuoteIfContains(CStdStr::AddSlashIfNeeded(stCurDir));
system(strCmd.c_str());
}
else
{
//压缩为rar,默认分卷大小为3.8G
_tstring strCmd = "rar a -v4000000 -ep1 ";
if (g_bRecovery)
{
strCmd += " -rr5p ";
}
//strCmd += strDstFile + " " + CStdStr::AddQuoteIfContains(stCurItem);
strCmd += strDstFile + " " + CStdStr::AddQuoteIfContains(stCurDir);
system(strCmd.c_str());
}
//删除临时的快捷方式
if (g_bAddUrl)
{
DeleteFile(st52slg.c_str());
}
return true;
}
return false;
}
_tstring DeCompressFile(const _tstring& stCurItem, const _tstring& stDstDir)
{
if (CStdFile::IfAccessFile(stCurItem))
{
//处理文件
_tstring strDirName = CStdStr::GetNameOfFile(stCurItem, false);
_tstring strDstFile = CStdStr::AddSlashIfNeeded(stDstDir) + strDirName + g_stSuffix;
_tstring strDstDir = CStdStr::AddSlashIfNeeded(CStdStr::AddSlashIfNeeded(CStdStr::GetDirOfFile(stDstDir)) + strDirName);
//有空格的时候,需要添加引号
strDstFile = CStdStr::AddQuoteIfContains(strDstFile);
if (g_b7z)
{
_tstring strCmd = "7z a " + strDstFile + " -mhe " + CStdStr::AddQuoteIfContains(stCurItem);
system(strCmd.c_str());
}
else
{
//解压缩
_tstring strCmd = "rar x -o+ " + CStdStr::AddQuoteIfContains(stCurItem) + " -p" + g_strPwd + " " + CStdStr::AddQuoteIfContains(CStdStr::AddSlashIfNeeded(strDstDir));
system(strCmd.c_str());
}
return CStdStr::AddSlashIfNeeded(strDstDir, '\\' ,false);
}
return "";
}
bool CompressFile(const _tstring& stCurItem, const _tstring& stDstDir)
{
if (CStdFile::IfAccessFile(stCurItem))
{
//处理文件
_tstring strDirName = CStdStr::GetNameOfFile(stCurItem, false);
_tstring strDstFile = CStdStr::AddSlashIfNeeded(stDstDir) + strDirName + g_stSuffix;
//有空格的时候,需要添加引号
strDstFile = CStdStr::AddQuoteIfContains(strDstFile);
if (g_b7z)
{
_tstring strCmd = "7z a " + strDstFile + " -mhe " + CStdStr::AddQuoteIfContains(stCurItem);
system(strCmd.c_str());
}
else
{
//压缩为rar,默认分卷大小为3.8G
_tstring strCmd = "rar a -v4000000 -ep1 ";
if (g_bRecovery)
{
strCmd += " -rr5p ";
}
strCmd += strDstFile + " " + CStdStr::AddQuoteIfContains(stCurItem);
system(strCmd.c_str());
}
return true;
}
return false;
}
int CompressOneItem(const _tstring& strSrcItem, const _tstring& stDstDir, const size_t& index)
{
//处理所有项目,推荐判断项目是否存在
const _tstring stCurItem = strSrcItem;
const _tstring stDstItem = CStdStr::AddSlashIfNeeded(stDstDir) + CStdStr::GetNameOfFile(stCurItem);
#ifdef ITEM_ONLY_FILE
_tstring strDeCompDir = DeCompressFile(stCurItem, stDstItem);
if (strDeCompDir.length())
{
CompressDir(strDeCompDir, stDstDir);
deleteDir(strDeCompDir, true);
}
#endif // ITEM_ONLY_FILE
#ifdef ITEM_ONLY_DIR
//如果是目录
//读取rar格式的文件,并且逐个处理
std::vector<_tstring> vRarFiles;
size_t nFileCount = getFiles(strSrcItem, vRarFiles, "*.rar");
for (int i = 0; i < nFileCount; ++i)
{
_tstring stSubRarFile = vRarFiles[i];
_tstring stSubRarDir = CStdStr::GetDirOfFile(stSubRarFile);
_tstring stDstSubDir = stDstItem + stSubRarDir.substr(strSrcItem.length());
_tstring strDeCompDir = DeCompressFile(stSubRarFile, stDstSubDir);
if (strDeCompDir.length())
{
const _tstring stSubDstItem = CStdStr::AddSlashIfNeeded(stDstSubDir) + CStdStr::GetNameOfFile(stSubRarFile);
const _tstring stDstSubDir = CStdStr::GetDirOfFile(stSubDstItem);
if (!CStdDir::IfAccessDir(stDstSubDir) && !CStdDir::CreateDir(stDstSubDir))
{
continue;
}
CompressDir(strDeCompDir, stDstSubDir);
deleteDir(strDeCompDir, true);
}
}
#endif // ITEM_ONLY_DIR
return 0;
}
欢迎交流与讨论。
2021年01月29日 01点01分 5
1