犀牛脚本:使用正则替换指定目录下的文件名

写在第一个犀牛脚本:

批处理实在太弱了,写着真是受罪。我不是自虐狂,所以决定今后一些实用的小功能全部采用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);
}
posted @ 2011-08-12 20:26  倚楼无语F5  阅读(595)  评论(0编辑  收藏  举报