day20201013 ---批量文件名修改小工具
经常有批量修改文件名的需求,感觉网上找的不好用,自己整一个,C语言不会,网上找的代码拼凑了一个小工具。点我下载
用法:
代码:

#include <iostream> #include <cstring> #include <io.h> #include <regex> #include <string> using namespace std; void listFiles(const char * dir, char * old_pattern, char * new_pattern); void rename_the_file(string workdir, char * fileName, char * old_pattern, char* new_pattern); int recursion = 0; int main(int argc, char *argv[], char *envp[]){ if (argc == 5){ recursion = 1; } /* argv[1],workdir argv[2],old pattern argv[3],new pattern argv[4],whether recursion subdir */ if (argc < 4){ cout << "USAGE: renamer <workdir> <old_pattern> <new_pattern>" << endl; return 0; } else{ cout << "----------------------" << endl; cout << "WORKDIR: \t\t\""<< argv[1] <<"\"\nOLD_PATTERNN: \t\t\"" << argv[2] << "\"\nNEW_PATTERN: \t\t\"" << argv[3] <<"\""<< endl; cout << "----------------------" << endl; listFiles(argv[1],argv[2],argv[3]); return 0; } } void rename_the_file(string workdir,char * fileName,char * old_pattern, char* new_pattern){ cout << "处理:" << fileName << " \n"; string ee(old_pattern); regex e(ee); smatch m; string name(fileName); string newName = string(new_pattern); bool found = regex_search(name, m, e); if (found){ cout << name << "\t\t -----> \t\t" << workdir; string tmp = regex_replace(name, e, newName); rename((workdir + name).c_str(), (workdir + tmp).c_str()); cout << tmp << endl; } } void listFiles(const char * dir, char * old_pattern, char * new_pattern){ char dirNew[200]; strcpy(dirNew, dir); // 在目录后面加上"\\*.*"进行第一次搜索 strcat(dirNew, "\\*.*"); intptr_t handle; _finddata_t findData; handle = _findfirst(dirNew, &findData); // 检查是否成功 if (handle == -1) return; do{ if (findData.attrib & _A_SUBDIR){ if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0) continue; if (recursion == 1){ cout << findData.name << "\t<dir>\n"; // 在目录后面加上"\\"和搜索到的目录名进行下一次搜索 strcpy(dirNew, dir); strcat(dirNew, "\\"); strcat(dirNew, findData.name); listFiles(dirNew, old_pattern, new_pattern); } }else{ rename_the_file(string(dir) + "\\", findData.name, old_pattern, new_pattern); } } while (_findnext(handle, &findData) == 0); // 关闭搜索句柄 _findclose(handle); }
示例:
比如我想把前面重复的数字去掉,把后面括号和括号内的东西去掉可以执行命令:

renamer C:\Users\Administrator\Desktop\test "\.\d+" "" renamer C:\Users\Administrator\Desktop\test "\(Av\d+\,P\d+\)" ""
如果您使用python3,
欢迎pip install just-rename,用法和这个renamer一样。
通过just-rename 进行文件名批量修改。