借Processing语言及IDE做DOS批处理的事务( 批量修改文件夹或文件的名字 )

一直想用Processing语言做一些批处理的事务,因为其自带的IDE功能紧凑易用,极度轻量,又加上Java语言的生态极具友好,处理一些windows相关操作完全可行,简单快捷。
这次就是用它做【批量修改文件夹或文件的名字】的任务。

开端

想在B站上发视频,发一个合集,找到了以往做的视频,有将近100个,但是格式都不太兼容,所以用了小丸工具箱批量压制,但是没有看清参数配置,所有的批处理过的文件的文件名最后加了“_batch”这一后缀。但是发往B站我不想要这个后缀。

解决

起初想用DOS批处理命令,但是好多细节不知,网上一查一时半会儿搞不定,所以放弃,改用设想的P5作为语言处理该问题。
Java SDK 中对各操作系统的文件管理业务都有封装,比如File类,就可以修改Windows下的文件属性,包括文件名。先要导入包:

import java.io.File;

其次是要获取一个目录对象:

 String path = "E:\Projects\pr\老\新建文件夹";    //要遍历的路径
 File f = new File(path);   //获取文件夹对象
 if (!f.exists()) {
     System.out.println(path + " not exists");
     return;
 }

获取该对象中的子对象:

File fa[] = f.listFiles();   // 返回该路径下的所有文件夹及文件的绝对路径,返回值为File数组

然后继续,遍历其数组,对于文件对象的话获取它的名字然后做相应处理,见下:

for (int i = 0; i < fa.length; i++) {
  File fs = fa[i];
  if (fs.isDirectory()) {  //检测对象是否是文件夹
     System.out.println("文件夹: "fs.getName());
  } else {
    //System.out.println(fs.getName());   // getName 方法获取对象文件名
    String tempstr = fs.getName().substring(0, fs.getName().length()-10); //获取相应文件名[目标文件名],去除 _batch.MP4 字符
    //System.out.println(tempstr);
    String tt = path + "\"+ fs.getName();
    String tt2 = path + "\"+ tempstr +".mp4";
    println(tt2);
    new File(tt).renameTo(new File(tt2));  // 使用 rename 方法进行文件名更改!! 【注意】前后两路径一定是合法合理有效的,否则执行无效
  }
}

搞定!效果如下两图:

原来

image

现在

image


结尾

最后的完整源码:

public static void main(String[] args) {
  getFileName();
}

public static void getFileName() {
  //String path = "G:/lxz/20130611"; // 路径
  String path = "E:\Projects\pr\老\新建文件夹";    //要遍历的路径

  File f = new File(path);
  if (!f.exists()) {
    System.out.println(path + " not exists");
    return;
  }

  File fa[] = f.listFiles();
  for (int i = 0; i < fa.length; i++) {
    File fs = fa[i];
    if (fs.isDirectory()) {
        System.out.println("文件夹: "fs.getName());
    } else {
      //System.out.println(fs.getName());
      String tempstr = fs.getName().substring(0, fs.getName().length()-10);
      //System.out.println(tempstr);
      String tt = path + "\"+ fs.getName();
      String tt2 = path + "\"+ tempstr +".mp4";
      println(tt2);
      new File(tt).renameTo(new File(tt2));
    }
  }
}

别有疑惑,这就是PDE文件源码!Processing自带的文本检测器如果检测到有静态的main入口函数,那么会屏蔽掉Processing的“setup draw”框架,这样跟原生的Java程序就是一样的!源码参考:

import processing.core.*; 
import processing.data.*; 
import processing.event.*; 
import processing.opengl.*; 

import java.util.HashMap; 
import java.util.ArrayList; 
import java.io.File; 
import java.io.BufferedReader; 
import java.io.PrintWriter; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.IOException; 

public class bat4changename2 extends PApplet {

  public static void main(String[] args) {
    getFileName();
  }

  public static void getFileName() {
    //String path = "G:/lxz/20130611"; // 路径
    String path = "E:\Projects\pr\老\新建文件夹";    //要遍历的路径

    File f = new File(path);
    if (!f.exists()) {
      System.out.println(path + " not exists");
      return;
    }

    File fa[] = f.listFiles();
    for (int i = 0; i < fa.length; i++) {
      File fs = fa[i];
      if (fs.isDirectory()) {
          System.out.println("文件夹: "fs.getName());
      } else {
        //System.out.println(fs.getName());
        String tempstr = fs.getName().substring(0, fs.getName().length()-10);
        //System.out.println(tempstr);
        String tt = path + "\"+ fs.getName();
        String tt2 = path + "\"+ tempstr +".mp4";
        println(tt2);
        new File(tt).renameTo(new File(tt2));
      }
    }
  }
}

当然,上述语义是在原名基础上减去,那么如果是增添也是同理的,包括直接修改文件名或者文件夹的名字,比如批量修改成序列的格式“sequimgs_00000”、“sequimgs_00001”、“sequimgs_00002”等。

希望此篇可以给予读者参考借鉴,Processing远比想象的要浪漫!~


[参考文献]
[1] https://www.cnblogs.com/xosg/p/8179066.html 【Java】对文件或文件夹进行重命名
[2] https://blog.csdn.net/u014453898/article/details/79655338 Java遍历目录下的所有文件

原文地址:https://www.cnblogs.com/sharpeye/p/15136188.html