您的位置:首页 > 编程语言

自己动手编程实现文件批量重命名

2011-04-29 09:54 459 查看
最近用BT下电视剧,每一集的视频文件的文件名都被加上了那个网站的地址,显得非常的杂乱无章,还有在网上下图片的时候,文件名也会非常乱,手动修改的话非常费时费力,于是动手写了一个自动化的工具,反正下TVB的剧集是我的嗜好嘛~~~

程序运行效果图:



下面还是贴源码吧,有部分源码是由MFC框架自动生成的:

/******************************************************************************************

*FileName:ReNameDlg.h

*Author:Swtar

*Date:2011-4-8

*******************************************************************************************/

#if !defined(AFX_RENAMEDLG_H__66D0A503_8786_45F8_9B75_40A4D9A3081C__INCLUDED_)
#define AFX_RENAMEDLG_H__66D0A503_8786_45F8_9B75_40A4D9A3081C__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif

class CReNameDlg : public CDialog
{

public:
CReNameDlg(CWnd* pParent = NULL);

//声明控件操纵函数
void ControlControler(BOOL bOp);

//MFC自动生成的数据映射

enum { IDD = IDD_RENAME_DIALOG };
CButton m_cancel;
CButton m_ok;
CEdit m_kzmct;
CButton m_browser;
CSpinButtonCtrl m_spin;
CString m_directory;
CString m_kzm;
int  m_start;

protected:
virtual void DoDataExchange(CDataExchange* pDX);

protected:
HICON m_hIcon;

virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnBrowser();
virtual void OnOK();
virtual void OnCancel();

DECLARE_MESSAGE_MAP()
};

#endif

/******************************************************************************************

*FileName:ReNameDlg.cpp

*Author:Swtar

*Date:2011-4-8

*******************************************************************************************/

#include "stdafx.h"
#include "ReName.h"
#include "ReNameDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CReNameDlg::CReNameDlg(CWnd* pParent /*=NULL*/)
: CDialog(CReNameDlg::IDD, pParent)
{
m_directory = _T("");
m_kzm = _T("");
m_start = 0;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CReNameDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDCANCEL, m_cancel);
DDX_Control(pDX, IDOK, m_ok);
DDX_Control(pDX, IDC_KZM, m_kzmct);
DDX_Control(pDX, IDC_BROWSER, m_browser);
DDX_Control(pDX, IDC_SPIN1, m_spin);
DDX_Text(pDX, IDC_DIRECTORY, m_directory);
DDX_Text(pDX, IDC_KZM, m_kzm);
DDX_Text(pDX, IDC_START, m_start);
}

BEGIN_MESSAGE_MAP(CReNameDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BROWSER, OnBrowser)
END_MESSAGE_MAP()

BOOL CReNameDlg::OnInitDialog()
{
CDialog::OnInitDialog();

SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
//初始化控件及数据
m_browser.SetWindowText("浏览...");

CEdit *StartNum=(CEdit*)GetDlgItem(IDC_START);
m_spin.SetBuddy(StartNum);
m_spin.SetPos(1);
m_spin.SetRange(1,255);
m_spin.SetBase(1);

m_kzm="rmvb";
m_start=1;

//更新映射

UpdateData(0);

return TRUE;
}

void CReNameDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this);
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

HCURSOR CReNameDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

//浏览文件夹

void CReNameDlg::OnBrowser()
{
CHAR szPath[MAX_PATH] = {0};
BROWSEINFO browsInfo;
IMalloc *pDllMlc;
LPCITEMIDLIST pidlFolder;
browsInfo.hwndOwner = m_hWnd;
browsInfo.pidlRoot = NULL;
browsInfo.pszDisplayName = NULL;
browsInfo.lpszTitle = "选择文件夹";
browsInfo.ulFlags = BIF_RETURNONLYFSDIRS;
browsInfo.lpfn = NULL;
browsInfo.lParam = NULL;
browsInfo.iImage = 0;
if(SUCCEEDED(SHGetMalloc(&pDllMlc)))
{
pidlFolder=SHBrowseForFolder(&browsInfo);
if(NULL != pidlFolder)
{
SHGetPathFromIDList(pidlFolder, (CHAR*)szPath);
m_directory = szPath;
UpdateData(FALSE);
}
pDllMlc->Free(NULL);
pDllMlc->Release();
}
}

//开始执行批量重命名操作

void CReNameDlg::OnOK()
{
if(m_directory.IsEmpty()||m_kzm.IsEmpty()||m_start<0)
{
MessageBox("请提供完整的信息!","提示",MB_OK|MB_ICONSTOP);
return;
}
ControlControler(FALSE);
CString szFileName("");
CString szAllFile("//*.");
UpdateData();
CString szFindDirectory=m_directory+szAllFile+m_kzm;
CString szOldName,szNewName;
DWORD dwThreadID(0);
HANDLE hFile;
WIN32_FIND_DATA stWfd;
int iIsTheLastFile=0;
ZeroMemory(&stWfd,sizeof(WIN32_FIND_DATA));
hFile=FindFirstFile(szFindDirectory,&stWfd);
do
{
if(stWfd.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY)
continue;
szOldName.Format("%s//%s",m_directory,stWfd.cFileName);
szNewName.Format("%s//%d.%s",m_directory,m_start,m_kzm);
m_start++;
MoveFile(szOldName,szNewName);
iIsTheLastFile=FindNextFile(hFile,&stWfd);
}
while(iIsTheLastFile);
FindClose(hFile);
MessageBox("批量重命名成功!","提示",MB_OK|MB_ICONINFORMATION);
ControlControler(TRUE);
}

//退出程序

void CReNameDlg::OnCancel()
{
CDialog::OnCancel();
}

//操纵控件状态

void CReNameDlg::ControlControler(BOOL bOp)
{
if(bOp)
{
m_directory.Empty();
m_start=1;
}
m_browser.EnableWindow(bOp);
m_spin.EnableWindow(bOp);
m_kzmct.EnableWindow(bOp);
m_ok.EnableWindow(bOp);
m_cancel.EnableWindow(bOp);
UpdateData(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: