之前写了一篇《批处理替换指定目录下所有文件夹名和文件名》,但是会存在些小问题,为了优雅的解决问题,打算用Qt开发个应用软件处理一下,同时把存在的问题都解决了。当然前提是目标机允许运行Qt打包的程序。

实现原理很简单,用QFileDialog让用户选择指定目录,通过深度优先搜索(DFS)逐层逐个遍历文件夹和文件,如果名称符合替换条件则替换相应的字符串,需要注意的是搜索时先搜索子文件夹内部再判断文件夹本身。

为了更方便使用,支持用户输入多个字符串,任意一个匹配成功即认为满足替换条件。例如在下图所示的软件界面中的指定文本,支持输入“aa$bb$cc”,如果文件名中带有aa或bb或cc,均视为满足替换条件,会自动替换为目标文本。

软件界面:

RenameFilesName.h

#ifndef RENAMEFILESNAME_H
#define RENAMEFILESNAME_H#include <QFileDialog>
#include <QWidget>
#include <QDebug>#if defined(_MSC_VER)
#pragma execution_character_set("utf-8")
#endifnamespace Ui {
class RenameFilesName;
}class RenameFilesName : public QWidget
{Q_OBJECTpublic:explicit RenameFilesName(QWidget *parent = 0);~RenameFilesName();protected:void dfsRequireFiles(QString path);     // dfs文件列表bool dealIsContainsText(QString name, QString &newName);  // 判断是否包含文本private slots:void on_pushButtonPicDir_clicked();     // 选取目录void on_pushButtonSearch_clicked();     // 开始查询private:Ui::RenameFilesName *ui;int m_numSuccess;      // 替换成功的数量int m_numFailed;       // 替换失败的数量int m_totFile;  // 总文件数量int m_totDir;   // 总文件夹数量
};#endif // RENAMEFILESNAME_H

RenameFilesName.cpp

#include "RenameFilesName.h"
#include "ui_RenameFilesName.h"RenameFilesName::RenameFilesName(QWidget *parent) :QWidget(parent),ui(new Ui::RenameFilesName)
{ui->setupUi(this);
}RenameFilesName::~RenameFilesName()
{delete ui;
}void RenameFilesName::dfsRequireFiles(QString path)
{QDir dir(path);QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);  // 获取文件列表QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);  // 获取文件夹里列表for (int i = 0; i < file_list.size(); i++){++m_totFile;QString newName;if (dealIsContainsText(file_list.at(i).fileName(), newName)){QString originPath = file_list.at(i).absoluteFilePath();QString newPath = file_list.at(i).absolutePath() + "/" + newName;QDir dir(originPath);if (dir.rename(originPath, newPath)){ui->listWidget->addItem(newPath);++m_numSuccess;}else++m_numFailed;}}for (int i = 0; i != folder_list.size(); i++){QString name = folder_list.at(i).absoluteFilePath();++m_totDir;dfsRequireFiles(name);  // 递归子目录QString newName;if (dealIsContainsText(folder_list.at(i).fileName(), newName)){QString originPath = folder_list.at(i).absoluteFilePath();QString newPath = folder_list.at(i).absolutePath() + "/" + newName;QDir dir(originPath);if (dir.rename(originPath, newPath)){ui->listWidget->addItem(newPath);++m_numSuccess;}else++m_numFailed;}}
}bool RenameFilesName::dealIsContainsText(QString name, QString &newName)
{QStringList listTargetStr = ui->lineEditText->text().split("$");for (int i = 0; i < listTargetStr.size(); ++i){if (name.contains(listTargetStr.at(i))){newName = name.replace(listTargetStr.at(i), ui->lineEditTargetText->text());return true;}}return false;
}void RenameFilesName::on_pushButtonPicDir_clicked()
{QString dirName = QFileDialog::getExistingDirectory(this, tr("打开目录"), "",  QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);ui->lineEditDir->setText(dirName);
}void RenameFilesName::on_pushButtonSearch_clicked()
{ui->labelStatus->setText("查询开始!");QString dirName = ui->lineEditDir->text();ui->listWidget->clear();m_numSuccess = 0;m_numFailed = 0;m_totDir = 0;m_totFile = 0;dfsRequireFiles(dirName);ui->labelStatus->setText(QString("查询结束!共查询 %1 个子文件夹,%2 个子文件。其中,替换成功的有 %3 条,替换失败的有 %4 条。").arg(m_totDir).arg(m_totFile).arg(m_numSuccess).arg(m_numFailed));
}

实测效果:

在指定目录DisplayImage里,将所有文件名中数字前的前缀统一命名为Image。

分析一下文件名,前缀中不符合规范的命名有image、IMAGE、IME、IMG四种,所以在软件的指定文本中输入image$IMAGE$IME$IMG,目标文本输入Image,点击“开始替换”即可。

修改后效果:

Qt 批量替换指定文本为目标文本相关推荐

  1. 使用Python批量替换指定目录所有文件中的指定文本

    使用Python批量替换指定目录所有文件中的指定文本 # -*- coding: utf-8 -*- import os from = "aaa" #替换为什么内容,可以是多行 t ...

  2. mysql数据库字段字符转数字批量语句_MySQL数据库批量替换指定字段字符串SQL语句命令...

    MySQL批量替换是我们经常会用到的功能,有时站内包含敏感词,会给我们带来麻烦,而在信息量较大的情况下,一篇篇查找.修改是不现实的.用MySQL批量替换,甚是轻松.发布在这里供参考,以备不时之需. M ...

  3. 利用MySQL语句批量替换指定wordpress文章中的图片路径

    天花了很多时间将SAE服务器中的图片下载到本地,然后删掉,但是有一个问题就是,所有文章中的图片路径还是以前的,没有根据域名来.导致下午某些时间段图片都是无法显示的,后来想到用MySQL直接批量替换,执 ...

  4. mysql一键更改图片地址_利用mysql语句批量替换指定wordpress文章图片路径

    有时候当你看到一篇十分优秀的国外文章的时候,比如说十个优秀.五十个优秀的网站设计欣赏.wordpress主题下载.jquery插件下载等等. 这些文章当中往往会跟随大量的示例图片供读者查看,如果这些文 ...

  5. Excel如何在整个工作簿中批量替换指定数据

    今天跟大家分享一下Excel如何在整个工作簿中批量替换 1.下面以下图为例跟大家介绍一下怎么批量替换整个工作簿数据. 2.首先我们点击下图选项 3.单击[更多].[批量替换] 4.选择全部工作表,然后 ...

  6. 怎么将 Excel 中的第一个工作表或者其它指定的工作表批量替换成新的内容?

    概要:在我们日常办公中,经常会碰到需要替换 Excel 中的某一个 Sheet 或者某几个 Sheet 的功能,「我的ABC软件工具箱」就实现了批量替换指定 Sheet 的功能,可以轻松实现对 Exc ...

  7. 怎么将 Word、PPT、PDF 中的第一页、最后一页以及其它指定页批量替换成新的内容?

    概要:在我们日常办公中,经常会碰到需要替换文档中的某一页或者某几页的功能,「我的ABC软件工具箱」就实现了批量替换指定页的功能,可以轻松实现对 Word.PPT.PDF 文件的第一页.最后一页以及其他 ...

  8. html防替换资源,蓝梦HTML批量替换工具免费版

    非常不错的文本批量替换软件,蓝梦HTML批量替换工具免费版为用户提供了两种不同的替换方式,以满足不同的情况,蓝梦HTML批量替换工具免费版不需要安装,没有任何广告弹窗,界面十分简洁,在日常办公中经常需 ...

  9. Linux下批量替换文件内容和文件名(转)

    1.批量替换指定多个文件的文件内容 在指定目录/your/path里,查找包含old_string字符串的所有文件,并用new_string字符串替换old_string字符串. sed -i &qu ...

  10. BAT批量替换文件内容

    BAT批量操作 1.批量替换指定文件指定内容 案列:将test.txt文本中的inflie替换为outfile @echo off setlocal EnableDelayedExpansion se ...

最新文章

  1. 爬虫-windows下安装Scrapy及scrapy模块介绍
  2. 通俗理解决策树算法中信息增益的
  3. Linux进程通信之mmap
  4. 计算机网络第1章概述
  5. android 7.0添加菜单,Android 7.0 settings中添加/删除菜单
  6. 层次分析法(小白必看手机查看)
  7. 数据中心存储改造方案
  8. indesign排版标点挤压_indesign排版标点挤压设置技巧
  9. redis实现CAS
  10. Python实例——国际标准书号(ISBN)的计算
  11. 经典管理学定律4 - 鲶鱼效应
  12. java switch语句怎么写,java怎么用switch语句
  13. oracle会计科目明细请求,Oracle EBS R12财务月结基础
  14. django开发一个管理系统基于Python实现的酒店住房管理系统
  15. nkd 编译ffmpeg错误: clang is unable to create an executable file. C compiler test failed.
  16. python include_python中的include()是什么?它和进口有什么不同?
  17. CorelDRAWX4的VBA插件开发(十)多文件编程
  18. 个人关于web开发浅尝辄止,web开发概览
  19. 将Yolo格式标注文件转换为VOC格式
  20. WML语法全接触 WAP建站语言

热门文章

  1. 第十一章 Mock.js 数据生成器
  2. 基于珞珈一号夜间灯光数据的GDP空间化
  3. Eclipse的安装
  4. verilog 用逻辑门实现四选一数据选择器
  5. 【使用教程】面向回家编程-12306智能刷票,订票
  6. 陶瓷封装产品的6大优点
  7. c语言病毒恶搞代码大全,恶搞病毒代码案例分析
  8. 共享单车信号服务器,【严肃科普】【严肃科普】共享单车靠什么黑科技远程定位开锁?...
  9. 《Android框架揭秘》读书笔记——JNI
  10. 数据挖掘导论课后习题答案-第三章