需求
批量重命名大家都不陌生,Windows下大把,但是我看了下基本上都批量增加/删除字符,按顺序加1234.....
现在是我们有n个视频名称为xx_vid.mp4,vid不重复,有一张表格一个vid对应一个实际名称(如:vid1,xxx视频名).要求:批量改名把下载的视频名称按照一一对应关系改成实际名称.网上找了下也找不到,理了下思路就自己开干,写一个咯.

1.表格转成CSV格式不必要的东西都去掉,
2.手动处理要求vid不重复,视频名称也不重复,
3.代码思路:
- 3.1,读取本地csv表格保存数组,得到每个数组里面是一个NSString(vid,name)
- 3.2.遍历数组拿到每一个string,拆成数组,(vid和name分开)
- 3.3遍历所有文件名包含vid的,拿到文件修改名称为name,return.
创建命令行项目,写个类zpNameTool
创建实例对象执行run
使用:修改宏FileDirectory为视频所在文件夹,pathxx为csv文件路径
不多说下面是代码:
//
#import "zpNameTool.h"
#define FileDirectory @"/Volumes/Untitled/视频/1"
#define pathxx @"/Users/lxmacmini/Desktop/zzzz000/videoList0000.csv"
@implementation zpNameTool
-(void)run{
//获取文件夹内全部文件名称
NSFileManager* manager11 = [NSFileManager defaultManager];
NSArray *dirArray = [manager11 contentsOfDirectoryAtPath:FileDirectory error:nil];
NSString *path = pathxx;
NSString *fileContents = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//首先取出每一行的数据(vid,name)
NSArray *_allLinedStrings = [fileContents componentsSeparatedByString:@"\r\n"];
for (NSString *str in _allLinedStrings) {
NSArray *tempArr2 = [str componentsSeparatedByString:@","];
// NSLog(@"VID: %@ %@",tempArr2.firstObject,tempArr2.lastObject);//找到某个vid和对应的name
[self changeString:tempArr2.firstObject name:tempArr2.lastObject arr:dirArray];
}
}
- (void)changeString:(NSString *)Vid name:(NSString *)name arr:(NSArray *)dirArray
{
NSFileManager* manager = [NSFileManager defaultManager];
for (NSString *str in dirArray) {
//筛选出文件名内包含vid的文件
if ([str rangeOfString:Vid].location != NSNotFound) {
NSLog(@"成功-- %@ Name: %@ %@",Vid,name,str);
NSString* fromFileName = [FileDirectory stringByAppendingPathComponent:str];
//获取后缀名
NSString *lastName = [str pathExtension];
// 改变之后的文件名
NSString* changedStr = [NSString stringWithFormat:@"%@.%@",name,lastName];
// 改变之后的文件目录
NSString* toFileName = [FileDirectory stringByAppendingPathComponent:changedStr];
// 替换,其实也是重命名
[manager moveItemAtPath:fromFileName toPath:toFileName error:nil];
// NSLog(@"===%@",changedStr);
return;
}
}
网友评论