一直想用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 方法进行文件名更改!! 【注意】前后两路径一定是合法合理有效的,否则执行无效
}
}

搞定!效果如下两图:

原来

现在


结尾

最后的完整源码:

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遍历目录下的所有文件

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

  1. 用DOS批处理实现FTP自动上传、下载、清理文件

    用DOS批处理实现FTP自动上传.下载.清理文件 最近好像特别的忙,好久没来写点东西了,今天写了一个利用批处理程序完成FTP自动上传.下载.清理文件的程序.赶紧 记录下来,以备日后之用.功能介绍:自动 ...

  2. DOS下删除整个目录及下属所有文件夹及文件最好用的命令

    Windows XP以上的版本,在使用DOS命令模式下删除目录(目录就是档案总管中所谓的资料夹)不是用 deltree,而是用 rmdir 指令. 在Windows XP.2000.NT下都可用rmd ...

  3. cmd dos bat 深度变量文件夹指定文件

    echo off ::指定起始文件夹 :: 指定文件夹 set DIR = abc :: d:/abc 改脚本放在d: set DIR="%cd%" echo DIR=%DIR% ...

  4. dos新建文件夹 新建文件

    https://jingyan.baidu.com/article/49ad8bceb0237f5834d8fa19.html 新建文件夹: mkdir kkk 新建kkk文件夹 新建文件: type ...

  5. DOS命令查询当前文件夹中文件数量

    太牛X,太实用,因此单独记下 1. 仅统计文件数量 dir /b /a-d | find /v /c "&#@" 2. 统计文件和目录总数量 dir /b | find / ...

  6. dos 循环读取当前文件夹下的视频名字

    @echo off for /R %%i in (*.mp4) do ( echo -isma %%~nxi ) pause

  7. DOS批处理高级教程(还不错)(转)

    前言 目录 第二节 常用特殊符号     1.@  命令行回显屏蔽符     2.%  批处理变量引导符     3.>   输出重定向符     4.>>  输出重定向符     ...

  8. DOS批处理高级教程

    转载-->http://blog.csdn.net/lanbing510/article/details/7461073 前言 本教程主要引用伤脑筋版主的系列文章,同时参考引用[英雄]教程等其他 ...

  9. Go语言及Web框架Beego环境无脑搭建

    [原]Go语言及Web框架Beego环境无脑搭建 本文涉及软件均以截至到2013年10月12日的最新版本为准 1. 相关软件准备: 1) go1.2rc1.windows-386.msi,对应32位w ...

  10. Go语言及Web框架Beego环境

    Go语言及Web框架Beego环境无脑搭建 [原]Go语言及Web框架Beego环境无脑搭建 本文涉及软件均以截至到2013年10月12日的最新版本为准 1. 相关软件准备: 1) go1.2rc1. ...

随机推荐

  1. 3.MySQL常用函数

    常用命令 ● alter add alter table add <table_name> add <column_name> <data_type> [约束类型] ...

  2. ChannelInboundHandlerAdapter和SimpleChannelInboundHandler区别

    ChannelInboundHandlerAdapter和SimpleChannelInboundHandler是我们在使用Netty处理Handler时候很常用的两个继承类,虽然说二者实现的功能大致 ...

  3. 一个GLSL Shader的格式化算法(LALR解析器)

    一个GLSL Shader的格式化算法(LALR解析器) 在进行OpenGL程序开发时,我需要自行解析`string`类型的Shader代码,抽取出里面的某些变量名和subroutine名. 由于找不 ...

  4. 禁止所有搜索爬虫访问网站指定目录robots.txt

    禁止所有搜索爬虫访问网站指定目录 用自己私人的服务器来测试吧,99买阿里云 文件放置不让爬取的网站文件夹目录里 robots.txt User-agent: * Disallow: / User-Ag ...

  5. 国产系统UOS上的视频监控系统

    一.功能特点 (一)软件模块 视频监控模块,各种停靠小窗体子模块,包括设备列表.图文警情.窗口信息.云台控制.预置位.巡航设置.设备控制.悬浮地图.网页浏览等. 视频回放模块,包括本地回放.远程回放. ...

  6. Qt编写安防视频监控系统36-onvif连续移动

    一.前言 时隔一年多,重新对视频监控系统的onvif内核重写,一方面为了兼容Qt6,一方面按功能分类提高效率.整体逻辑思路是一样的,主要的改动是由于Qt6不再支持QtXmlPatterns模块(其实这 ...

  7. RxSqlUtils(base R2dbc)

    一.前言 随着 Solon 3.0 和 Solon-Rx 3.0 发布,又迎来了的 RxSqlUtils 扩展插件,用于"响应式"操作数据库.RxSqlUtils 是基于 R2db ...

  8. 阿里IM技术分享(十):深度揭密钉钉后端架构的单元化演进之路

    本文由钉钉技术专家啸台.万泓分享,为了获得更好的阅读效果,本文已对内容进行少修订和重新排版. 1.引言 钉钉后端架构的单元化工作从2018年开始到今年,已经是第五个年头了.五年的时间,钉钉单元化迭代了 ...

  9. python-nmap实现python利用nmap扫描分析

    目录 前言 python-nmap的基本使用 PortScanner扫描 PortScannerAsync异步扫描 python-nmap的源码分析 前言 Nmap是一个非常用的网络/端口扫描工具,如 ...

  10. PostGIS数据库操作简介

    PostGIS数据库操作简介 PostGIS Docker安装 docker pull postgis/postgis docker run --name postgis -e POSTGRES_PA ...