借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 方法进行文件名更改!! 【注意】前后两路径一定是合法合理有效的,否则执行无效
}
}
搞定!效果如下两图:
原来

现在

结尾
最后的完整源码:
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批处理的事务( 批量修改文件夹或文件的名字 )的更多相关文章
- 用DOS批处理实现FTP自动上传、下载、清理文件
用DOS批处理实现FTP自动上传.下载.清理文件 最近好像特别的忙,好久没来写点东西了,今天写了一个利用批处理程序完成FTP自动上传.下载.清理文件的程序.赶紧 记录下来,以备日后之用.功能介绍:自动 ...
- DOS下删除整个目录及下属所有文件夹及文件最好用的命令
Windows XP以上的版本,在使用DOS命令模式下删除目录(目录就是档案总管中所谓的资料夹)不是用 deltree,而是用 rmdir 指令. 在Windows XP.2000.NT下都可用rmd ...
- cmd dos bat 深度变量文件夹指定文件
echo off ::指定起始文件夹 :: 指定文件夹 set DIR = abc :: d:/abc 改脚本放在d: set DIR="%cd%" echo DIR=%DIR% ...
- dos新建文件夹 新建文件
https://jingyan.baidu.com/article/49ad8bceb0237f5834d8fa19.html 新建文件夹: mkdir kkk 新建kkk文件夹 新建文件: type ...
- DOS命令查询当前文件夹中文件数量
太牛X,太实用,因此单独记下 1. 仅统计文件数量 dir /b /a-d | find /v /c "&#@" 2. 统计文件和目录总数量 dir /b | find / ...
- dos 循环读取当前文件夹下的视频名字
@echo off for /R %%i in (*.mp4) do ( echo -isma %%~nxi ) pause
- DOS批处理高级教程(还不错)(转)
前言 目录 第二节 常用特殊符号 1.@ 命令行回显屏蔽符 2.% 批处理变量引导符 3.> 输出重定向符 4.>> 输出重定向符 ...
- DOS批处理高级教程
转载-->http://blog.csdn.net/lanbing510/article/details/7461073 前言 本教程主要引用伤脑筋版主的系列文章,同时参考引用[英雄]教程等其他 ...
- Go语言及Web框架Beego环境无脑搭建
[原]Go语言及Web框架Beego环境无脑搭建 本文涉及软件均以截至到2013年10月12日的最新版本为准 1. 相关软件准备: 1) go1.2rc1.windows-386.msi,对应32位w ...
- Go语言及Web框架Beego环境
Go语言及Web框架Beego环境无脑搭建 [原]Go语言及Web框架Beego环境无脑搭建 本文涉及软件均以截至到2013年10月12日的最新版本为准 1. 相关软件准备: 1) go1.2rc1. ...
随机推荐
- 11C++循环结构-for循环(1)
一.for语句 引出问题: 当需要重复执行某一语句时,使用for语句.for语句最常用的格式为: for (循环变量赋初值:循环条件:循环变量增值) 语句: 注: "语句:"就是循 ...
- Flutter TickerProvider使用
Flutter TickerProvider使用 当需要使用Animation controller时,需要在控制器初始化时传递一个vsync参数,此时需要用到TickerProvider,例如 cl ...
- 【C#】【桌面应用开发】拖拽文件到文本框获得所拖拽文件的路径
步骤1:设置文本框属性 设置文本框属性,将属性AllowDrop改为True 使其允许拖拽文件 步骤2: 在控件事件管理中双击DragEnter,添加事件 private void Form_sett ...
- Doc for DevNow
前言 DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论.搜索等功能,欢迎大家体验. 首先庆祝下 DevNow star 在不久前过百,对我来说还是蛮有成就感的,感 ...
- FFmpeg命令行示例
1 提取视频流/音频流 // 分离视频流和音频流 ffmpeg -i input_file -vcodec copy -an output_file_video ffmpeg -i input_fil ...
- MySql中的driverClassName、url
在Java桌面开发或者Java Web开发(基于SSM框架)配置MySQL数据源时,driverClassName属性如果填错了,会导致了这一系列错误.归结其原因就是 mysql-connector- ...
- IM开发基础知识补课(十):大型IM系统有多难?万字长文,搞懂异地多活!
本文由公众号"水滴与银弹"号主Kaito原创分享,原题"搞懂异地多活,看这篇就够了",为使文章更好理解,有修订. 1.引言 前几天技术群里有群友问我手上有没有I ...
- 使用Vue+ElementUI实现前端分页
背景 项目中要做一个公共的附件展示列表,针对某个模块某条记录展示,因此附件不会是大数据量,采用前端分页,使用Vue.JS+ElementUI布局展示,axios请求数据. 步骤 一.Html页面中引入 ...
- VS2022 没有MAUI模板的解决方法
原来是要安装 VS 2022 Preview 就是预览版.正式版还没有MAUI..... 以下的尝试都是蛋疼,没有卵用. 命令行窗口输入:dotnet workload install maui VS ...
- redis-总结列表
基础 启动命令 redis-server kconfig/redis.conf 通过指定的配置文件启动服务(kconfig/redis.conf是复制过来的) redis-cli -p 6379 使用 ...