009批量重命名软件(VC6)
有时候需要批量重命名一整个目录的文件,一个一个的修改肯定花时间和精力了!
可能宋坤先生默默无名,从里面还是找到了一个有用的程序,比如第8章的:
8.7 实战
8.7.2 对位图文件进行批量编 命名…………..348
例8.12 目录名:FileRename
由于VC6早已经遭到淘汰了,但是联系编程还有稍许价值,现阶段只能在虚拟机VMware14中运行WINDOWS XP来安装运行VC6了。
还有一个重要的问题是360杀毒软件会将你编译生成的EXE文件都处理为未知的可疑文件,提醒你隔离或者删除!^_
在360的老板周鸿祎的眼里草木皆兵:宁可错杀一千,不可放走一个!
为了简单期间,我将360杀毒和360安全卫士都退出了!
发现未知程序将要运行,是否放行/p>
可能是没有数字签名,微软的比尔盖茨也告诉你的程序不安全:^_
无法验证发布者。您确定要运行此软件吗/p>
由于是为重命名BMP扩展名的位图文件准备的程序,因此程序运行的时候除了:E:刘杨-商业修图教程
目录多了一个BMP目录之外啥也没有。(前缀使用:刘杨-商业修图教程。下同)
首先干掉必须是BMP扩展名!
//开始批量重命名文件
void CFileRenameDlg::OnBtStart()
{
CFileFind flFind;
CString szDir;
m_FileDir.GetWindowText(szDir);
flFind.FindFile(szDir + “\*.*”);
//统计位图数量
int nBmpCount = 0;
CFileFind flFindCount;
flFindCount.FindFile(szDir + “\*.*”);
while (flFindCount.FindNextFile())
{
if (!flFindCount.IsDirectory())
{
CString szPath;
szPath = flFindCount.GetFilePath();
char szLetter[128] = {0}; //盘符
char szCurDir[128] = {0}; //目录
char szName[128] = {0}; //文件名
char szExt[128] = {0}; //扩展名
_splitpath(szPath.GetBuffer(0), szLetter, szCurDir, szName, szExt); //分解目录
//判断文件扩展名
//if (strcmp(szExt, “.bmp”) == 0)
{
nBmpCount++;
}
}
}
flFindCount.Close();
m_Progress.SetRange32(0, nBmpCount);
//遍历位图文件
szDir = szDir + “\bmp”;
CreateDirectory(szDir, NULL); //创建目录
int nIndex = 1;
while(flFind.FindNextFile())
{
if (!flFind.IsDirectory())
{
CString szPath;
szPath = flFind.GetFilePath();
char szLetter[128] = {0}; //盘符
char szCurDir[128] = {0}; //目录
char szName[128] = {0}; //文件名
char szExt[128] = {0}; //扩展名
_splitpath(szPath.GetBuffer(0), szLetter, szCurDir, szName, szExt); //分解目录
//获取前缀
CString szPrefix;
m_Prefix.GetWindowText(szPrefix);
//判断文件扩展名
//if (strcmp(szExt, “.bmp”) == 0)
{
CFile file;
CString szCreatedName = szDir;
szCreatedName += “\”;
szCreatedName += szPrefix; //添加前缀
CString szIndex;
szIndex.Format(“%d”, nIndex);
szCreatedName += szIndex; //添加序
szCreatedName += “.bmp”;
m_Progress.SetPos(nIndex);
nIndex++;
//创建新的文件
file.Open(szCreatedName, CFile::modeCreate|CFile::modeReadWrite);
CFile readFile;
readFile.Open(szPath, CFile::modeRead);
DWORD dwLen = readFile.GetLength();
BYTE *pData = new BYTE[dwLen];
readFile.ReadHuge((void*)pData, dwLen);
readFile.Close();
file.WriteHuge((void*)pData, dwLen);
file.Close();
delete [] pData;
szCreatedName.ReleaseBuffer();
szIndex.ReleaseBuffer();
}
}
}
flFind.Close();
CString szBmpCount;
szBmpCount.Format(“%d个文件!”, nBmpCount);
MessageBox(“操作完成,处理” + szBmpCount);
szBmpCount.ReleaseBuffer();
}
生成的文件名为:
刘杨-商业修图教程1.bmp
刘杨-商业修图教程10.bmp
刘杨-商业修图教程2.bmp
刘杨-商业修图教程3.bmp
刘杨-商业修图教程4.bmp
刘杨-商业修图教程5.bmp
刘杨-商业修图教程6.bmp
刘杨-商业修图教程7.bmp
刘杨-商业修图教程8.bmp
刘杨-商业修图教程9.bmp
还是需要修改扩展名:
//开始批量重命名文件
void CFileRenameDlg::OnBtStart()
{
CFileFind flFind;
CString szDir;
m_FileDir.GetWindowText(szDir);
flFind.FindFile(szDir + “\*.*”);
//统计位图数量
int nBmpCount = 0;
CFileFind flFindCount;
flFindCount.FindFile(szDir + “\*.*”);
while (flFindCount.FindNextFile())
{
if (!flFindCount.IsDirectory())
{
CString szPath;
szPath = flFindCount.GetFilePath();
char szLetter[128] = {0}; //盘符
char szCurDir[128] = {0}; //目录
char szName[128] = {0}; //文件名
char szExt[128] = {0}; //扩展名
_splitpath(szPath.GetBuffer(0), szLetter, szCurDir, szName, szExt); //分解目录
//判断文件扩展名
//if (strcmp(szExt, “.bmp”) == 0)
{
nBmpCount++;
}
}
}
flFindCount.Close();
m_Progress.SetRange32(0, nBmpCount);
//遍历位图文件
szDir = szDir + “\bmp”;
CreateDirectory(szDir, NULL); //创建目录
int nIndex = 1;
while(flFind.FindNextFile())
{
if (!flFind.IsDirectory())
{
CString szPath;
szPath = flFind.GetFilePath();
char szLetter[128] = {0}; //盘符
char szCurDir[128] = {0}; //目录
char szName[128] = {0}; //文件名
char szExt[128] = {0}; //扩展名
_splitpath(szPath.GetBuffer(0), szLetter, szCurDir, szName, szExt); //分解目录
//获取前缀
CString szPrefix;
m_Prefix.GetWindowText(szPrefix);
//判断文件扩展名
//if (strcmp(szExt, “.bmp”) == 0)
{
CFile file;
CString szCreatedName = szDir;
szCreatedName += “\”;
szCreatedName += szPrefix; //添加前缀
CString szIndex;
szIndex.Format(“%d”, nIndex);
szCreatedName += szIndex; //添加序
//szCreatedName += “.bmp”;
szCreatedName += szExt;
m_Progress.SetPos(nIndex);
nIndex++;
//创建新的文件
file.Open(szCreatedName, CFile::modeCreate|CFile::modeReadWrite);
CFile readFile;
readFile.Open(szPath, CFile::modeRead);
DWORD dwLen = readFile.GetLength();
BYTE *pData = new BYTE[dwLen];
readFile.ReadHuge((void*)pData, dwLen);
readFile.Close();
file.WriteHuge((void*)pData, dwLen);
file.Close();
delete [] pData;
szCreatedName.ReleaseBuffer();
szIndex.ReleaseBuffer();
}
}
}
flFind.Close();
CString szBmpCount;
szBmpCount.Format(“%d个文件!”, nBmpCount);
MessageBox(“操作完成,处理” + szBmpCount);
szBmpCount.ReleaseBuffer();
}
得到的文件名为:
刘杨-商业修图教程1.avi
刘杨-商业修图教程10.avi
刘杨-商业修图教程2.avi
刘杨-商业修图教程3.avi
刘杨-商业修图教程4.avi
刘杨-商业修图教程5.avi
刘杨-商业修图教程6.avi
刘杨-商业修图教程7.avi
刘杨-商业修图教程8.avi
刘杨-商业修图教程9.avi
现在你就会发现你所命名的文件一位数和两位数的掺杂在一起,不整洁!
假定你所批量命名的文件名不超过100个(最多99个。)
继续修改代码:
刘杨-商业修图教程01.avi
刘杨-商业修图教程02.avi
刘杨-商业修图教程03.avi
刘杨-商业修图教程04.avi
刘杨-商业修图教程05.avi
刘杨-商业修图教程06.avi
刘杨-商业修图教程07.avi
刘杨-商业修图教程08.avi
刘杨-商业修图教程09.avi
刘杨-商业修图教程10.avi
结束语:
本程序还可以继续修改,改名之前直接统计需要重命名的文件的数目,然后自动配置一位数、二位数、三位数等等。
可能是微软的比尔盖茨的原因,最后重命名的文件的计数有点问题。不影响工作!
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!