前文:这几天帮助妹子用各种工具批量处理了文件夹的名字,由于时间比较急,来不及写代码处理,就用基本的dos命令结合excel还有Nodpad++工具给解决了,需求就是把文件夹的名字,例如:张三110322199911112222更改为110322199911112222张三。
头一次帮妹子平事,让我感觉敲代码还是有点用的。。。
基础正文开始:
dir D:\a\b.txt /b > D:\name.txt
dir [你的路径 ] /b >[你指的路径下所有的文件包含文件夹的名输出到当前路径]
此时的name.txt中已经有你所有的文件(夹)名称了,复制到excel中分列,会把中文跟数据分成两列;此时再用excel公式 =[列1]&[列2],成功颠倒中文跟数字;
最后一个dos重命名文件命令:
ren D:\a\b.txt c.txt
ren [指定更改文件路径] [新的名字]
以上是紧急时候的操作,接下来用java写了一个demo,缺点是需要装一个jdk。。。
1、简单的文件流处理重命名,注释少不懂自行百度;
package main.file.rename.lyt;
import java.io.File;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReFileName {
public static void main(String[] args) {
System.out.println("输入更改文件根目录:");
Scanner input = new Scanner(System.in);
//接受String类型
String filePath = input.next();
//输出结果
System.out.println("你输入的文件根为目录:"+ filePath);
System.out.println("开始更改文件名......");
File file = new File(filePath);
File[] list = file.listFiles();
// 如果目录下文件存在
if (file.exists() && file.isDirectory()){
for (int i = 0; i < list.length; i++){
String fileName = list[i].getName();
int indexNum = findFirstIndexNumberOfStr(fileName);
if(indexNum != -1){
String arr[] = new String[2];
arr[0] = fileName.substring(indexNum,fileName.length());
arr[1] = fileName.substring(0,indexNum);
String newFileName = arr[0]+arr[1];
File dest = new File(filePath + "/" + newFileName);
list[i].renameTo(dest);
System.out.println("文件:【"+fileName+"】更改为:【"+dest.getName()+"】");
}else{
System.err.println("文件中没有数字:"+fileName);
}
}
}
System.out.println("更改文件名成功结束!!!!!!");
}
/**
* 查询字符串中首个数字出现的位置
* @param str 查询的字符串
* @return 若存在,返回位置索引,否则返回-1;
*/
public static int findFirstIndexNumberOfStr(String str){
int i = -1;
Matcher matcher = Pattern.compile("[0-9]").matcher(str);
if(matcher.find()) {
i = matcher.start();
}
return i;
}
}
2、此处注意两点:cd命令需要指到你类上包以上的路径,java命令需要加上类名上对应的包名,保存为bat文件类型;
@echo off
%~d1
cd G:\hanjqReFileName\
java main.file.rename.lyt.ReFileName
pause
示例:
编译java文件为class字节码文件时可能遇到错误: