犀牛脚本:使用正则替换指定目录下的文件名
写在第一个犀牛脚本:
批处理实在太弱了,写着真是受罪。我不是自虐狂,所以决定今后一些实用的小功能全部采用javascript编写。
这些javascript并非运行在浏览器,而是在JVM上执行,全局对象可通过java来扩展。所以也可以说是跨平台的脚本。
其实我也不知道该怎么称呼这种东西。考虑到JVM上运行javascript是通过mozilla rhino来实现的。
我决定暂时叫它:犀牛脚本。
脚本文件组成
为了更好的运行犀牛脚本,需要三个文件辅助。
jr.bat-- 包装jrunscript命令
jXXX.bat -- 包装JS文件和指定扩展全局对象用jar文件
jXXX.js-- 实际的JS脚本文件
jr.bat
@echo off
:: 在jvm上运行javascript
:: %* 表示全部的命令参数
set args=%1
if defined args "%JAVA_HOME%"\bin\jrunscript.exe -l js -f %*
if not defined args "%JAVA_HOME%"\bin\jrunscript.exe
pause
jren.bat
@echo off
if not defined RHiNO_HOME goto end
jr %RHINO_HOME%\%~n0.js %*
:end
echo not found RHINO_HOME
使用正则替换指定目录下的文件名
使用方法
// 测试命令 d:\pic目录下名字为数字的jpg文件前加上西班牙风光
jren d:\pic ^\d*.jpg$ 西班牙风光$0
// 真正执行 d:\pic目录下名字为数字的jpg文件前加上西班牙风光
jren d:\pic ^\d*.jpg$ 西班牙风光$0 -e
脚本备份
View Code
var dir = arguments[0]
var regular = arguments[1]
var replaceStr = arguments[2] || ""
var flg = arguments[3] != "-e" ? true: false // "-e"是执行;非"-e"是测试
function append(folder, name) {
return new File(folder.getPath() + File.separator + name);
}
// 使用正则替换指定目录下的文件名
function rename(dir, regular, replaceStr, testFlg) {
var file = new File(dir);
for each(var f in file.listFiles()) {
var newName = f.getName().replaceAll(regular, replaceStr);
if (testFlg == true) {
println(newName);
} else {
f.renameTo(append(file, newName));
}
}
}
// 命令行
if (arguments.length > 0) {
rename(dir, regular, replaceStr, flg);
}