c语言批量修改文件名称,C语言实现批量文档名修改
8種機械鍵盤軸體對比
本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?
在Windows的資源管理器中,可以對文檔批量修改,但是修改后的文檔名格式不可以自定義,總是會產生括號包圍數字。現在Windows通過對WSL的支持,可以在WSL中對Windows中的文檔進行操作,所以可以使用Linux C編程來批量修改文檔名。代碼如下。main函數有兩個參數或者一個參數,工作目錄為當前目錄時,可以只把文檔名模板比如:picture22.png傳入,如果工作目錄不是當前目錄,則需要把目錄作為第一個參數,文檔名模板作為第二個參數傳入。運行進程后,文檔名就會批量修改成picture23.png、picture24.png等等,也就是數字會自動加一,其他部分不變。#include "headers.h"
#define MAXNAMELENGTH 1024
//獲取文檔名后綴,file_name是指向文檔名的指針,extension是返回的指向后綴的指針
void get_extension(const char *file_name, char *extension) {
int i, length;
length = strlen(file_name);
i = length - 1;
while (i >= 0) {
if (file_name[i] == '.')
break;
i --;
}
if (i < length && i >= 0)
strcpy(extension, file_name+i+1);
else
strcpy(extension, " ");
}
int main(int argc, char **argv) {
char *path, *name;
/**
* 如果只有一個外部參數,那么把當前目錄作為工作目錄
* 如果有兩個外部參數,把第一個參數當作工作路徑,第二個參數為文檔名格式
* 兩個都不是的話,參數出錯返回
*/
if (argc == 2) {
path = "./";
name = argv[1];
} else if (argc == 3) {
path = argv[1];
name = argv[2];
} else {
err_quit("args error: %d", argc);
}
DIR *dp;
struct dirent *drp;
/**
* oldname是文檔本來的名字
* newmname是文檔要被修改的名字
*/
char oldname[MAXNAMELENGTH], newname[MAXNAMELENGTH];
int n;
/**
* 進程的name參數可以分成三部分,如下所示。
* 假設name為Picture10lalala.png
* namestart內容就是Picture,nums就是10, lalal.png就是nameEnd的內容
* 用這三個部分進行新文檔名的合成
*/
char nameStart[MAXNAMELENGTH/8], nameEnd[MAXNAMELENGTH/8], nums[MAXNAMELENGTH/8];
/**
* 保存文檔后綴
*/
char extForm[10], extTemp[10];
if ((dp = opendir(path)) == NULL) {
perror("opendir failed");
exit(-1);
}
sscanf(name, "%[^0-9]%[0-9]%[^0-9]", nameStart, nums, nameEnd);
get_extension(name, extForm);
//puts(extForm);
n = atoi(nums);
if (nameStart == NULL || nameEnd == NULL || nums == NULL || strlen(nameStart) == 0 || strlen(nameEnd) == 0 || strlen(nums) == 0) {
printf("name format errorn");
exit(-1);
}
//printf("%s:%s:%sn", nameStart, nums, nameEnd);
printf("Operating dir: %sn", path);
/**
* 遍歷目錄中的內容
*/
while ((drp = readdir(dp)) != NULL) {
get_extension(drp->d_name, extTemp);
/**
* 如果讀到的文檔后綴和文檔名模板的后綴一樣,則進行如下操作
*/
if (!strcmp(extForm, extTemp)) {
/**
* 為了方便修改名字,新名字和舊名字都使用絕對路徑
* 根據path最后是否有/來對名字進行合成
*/
if (path[strlen(path)-1] == '/') {
sprintf(oldname, "%s%s", path, drp->d_name);
sprintf(newname, "%s%s%d%s", path, nameStart, n, nameEnd);
} else {
sprintf(oldname, "%s/%s", path, drp->d_name);
sprintf(newname, "%s/%s%d%s", path, nameStart, n, nameEnd);
}
//printf("old name: %sn", oldname);
//printf("new name: %sn", newname);
if (rename(oldname, newname) < 0) {
perror("rename failed");
exit(-1);
}
n ++;
}
}
closedir(dp);
printf("All stuf rename successedn");
return 0;
}
總結
以上是生活随笔為你收集整理的c语言批量修改文件名称,C语言实现批量文档名修改的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web前端开发配色表及标准颜色表
- 下一篇: DisplayTag汉化