如何用c语言进行文件的批量重命名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用c语言进行文件的批量重命名相关的知识,希望对你有一定的参考价值。

一个文件夹里边有30个文件,a,b,c等等
我想用c语言编写一个,将所有文件重命名为a_1,b_2,c_3等等

用c语言,谢谢,不用其他方法
我只是想学个方法,谁也不能否认以后没有可能用不到,想知道怎么用c语言进行文件的批量重命名

参考技术A 这个简易的 按照你的方法改名的程序
在UNIX下测试可用
如果想在windows下用的话 可以用dev c++编译
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>

int main(int argc, char **argv)

DIR *dirp;
struct dirent *dirt;
char dir_name[100];
int file_count=1; //file_count为计数.

if (argc != 2)
printf("argument miss\n");
exit(1);


if ((dirp = opendir(argv[1])) ==NULL)
printf ("open dir %s failed\n",argv[1]);
exit(1);

chdir(argv[1]);

while ( (dirt = readdir(dirp)) != NULL)
if ((strcmp(dirt->d_name,"..") !=0) && (strcmp(dirt->d_name,".")!=0))
memset(dir_name, 0, sizeof(dir_name));
strcpy(dir_name, dirt->d_name);
sprintf(dir_name + strlen(dirt->d_name), "_%d", file_count++);
if (rename(dirt->d_name, dir_name) < 0) //dir_name 为新的命名
printf("rename failed\n");
exit(1);




return 0;


原理挺简单 你输入一个文件夹作为参数 然后程序就打开这个文件夹遍历这个文件夹里的文件,把这个文件的名字取出来后面加上 "_计数" 用rename 重新命名就行了.本回答被提问者采纳
参考技术B 你这个问题很没有意义,所以没人来回答。
批量文件重命名,关键是这些文件重命名的规则无从把握,不可确定。

bat批量重命名(指定替换字符)

123_a.txt 234_a.txt 345_a.txt
如上面,有一系列的文件,要把a全部替换成b
bat文件该怎么写!!!!!!
求助
我要for循环的,不要rename的

1、电脑打开要重命名的文件,然后新建TXT文档。


2、打开新建的TXT文档后,输入字符

set a=1000

setlocal EnableDelayedExpansion

FOR /f "tokens=*" %%i IN ('dir /a:d /b') DO (

set /A a+=1

ren "%%i" "电影!a!"

)

1000和电影是可以更改的。


3、保存TXT后,把后缀改为bat,然后点击是。


4、点击运行bat,就可以把文件名都改好了。

参考技术A @ECHO OFF
set batchName=批量重命名-替换文件或者文件夹的字符串
TITLE 
忆林子--%batchName%
rem 
[HEAD========================================================HEAD]
rem 
名称:批量重命名
rem 作者:忆林子
rem 概要:批量替换文件或者文件夹的字符串
rem 用法:
rem 
1、将需要批量重命名的文件所在的那个文件夹拖到该处理上
rem 2、按提示输入要替换的字符串,然后按回车。
rem 
3、按提示输入想要替换为的字符串,然后按回车。
rem 
rem 考虑到多次操作,该批处理加了循环操作处理,可进行多次替换,而不
rem 
需要多次拖文件夹。
rem 
rem 修正履历
rem 修改者 修正方式 版本号 备考
rem 
[MID==========================================================MID]
rem 忆林子 新建 
Ver.2010.03.06-001
rem 
[FOOT========================================================FOOT]
COLOR 
0a
:main
set /a count=%count%+1
set /p oldStr=[请输入想要替换的字符串]
set /p 
newStr=[请输替换后的字符串]
for /f "tokens=*" %%a in (
'dir "%~1" /a /b'
) do 
(
SETLOCAL ENABLEDELAYEDEXPANSION
set "newFileName=%%~nxa"
set 
"newFileName=!newFileName:%oldStr%=%newStr%!"
ren "%~1\\%%~nxa" 
"!newFileName!"
ENDLOCAL
)
ECHO.
echo 第 %count% 
次替换已完成
ECHO.
goto :main
EXIT

用法参照以下说明

http://hi.baidu.com/kaixiawei/item/655fcd3cc3600ebf124b146f

追问

看着说明,怎么都用不了,newStr=[请输替换后的字符串],输入要替换的字回车后,显示“'newStr' 不是内部或外部命令,也不是可运行的程序”,报错。

追答

只能说百度回答的这个代码格式太垃圾。。。

复制出来的结果都是错的。你打开我发你的那个链接从里面复制代码保存吧。。

给你上传我保存的结果好了。

 

本回答被提问者采纳
参考技术B

神人啊,不用ren你想如何改文件名

ren很简单,为啥不用

ren *_a.txt *_b.txt

追问

抱歉,说的不明白,因为到时候可能还有别的要求
所以bat中只有ren *_a.txt *_b.txt不能解决问题

需要for %%i in(*) do (
set file=%%i
ren %%i %file:a=b%
)
类似于上面的样子,可是才刚开始学习,上面的写法就是无法把a改变成b,具体的怎么写也不清楚,错在哪也不知道。

追答for %%i in (*) do (
set file=%%i
ren %%i %file:a=b%
)

在复合语句中变量file要进行扩展,正确应该为

@echo off&setlocal enabledelayedexpansion
for %%i in (*_a.txt) do (
  set "file=%%i"
  ren "%%i" "!file:_a=_b!"
)

但是这种写法有个致命伤,会把所有_a变为_b。涉及到文件重命名,建议用for /f +dir 来操作。

只是要修改后面一个字符,参考:

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b *_a.txt') do (
    set "file=%%~na"
    ren "%%a" "!file:~,-1!b%%~xa"
)

以上是关于如何用c语言进行文件的批量重命名的主要内容,如果未能解决你的问题,请参考以下文章

操作系统 如何用python批量修改文件创建时间

文件批量重命名 如1-2 3-4 5-6

bat批量重命名(指定替换字符)

bat批量重命名文件(在子文件夹里)

linux下怎么批量重命名这些文件

linux中如何用rename命令重命名一个文件