【发布时间】:2018-08-22 02:05:40
【问题描述】:
我有一对字符串需要在给定文件夹的文件名中替换,例如BUL 到 Bg-bg,ENG 到 En-us,等等。这样的对有 12 个。我找到了一个脚本来处理一对替换,但是每当我尝试添加更多参数时,它以某种方式只循环一个并重命名一个匹配的字符串。无法计算出一个更简单的代码,它可以一次接受所有替换字符串对,而无需为每对字符串创建单独的循环。任何想法将不胜感激。
var sFolderName, sStringToFind;
var nResult;
sFolderName = "E:\\Users\\Username\\Desktop\\Sample"; // directory name
sStringToFind1 = "BUL";
sStringToReplace1 = "Bg-bg";
sStringToFind2 = "ENG";
sStringToReplace2 = "En-us";
nResult = renameFiles(sFolderName, sStringToFind1, sStringToReplace1, sStringToFind2, sStringToReplace2);
WScript.Echo(nResult + " files renamed");
// Function Name: renameFiles
// sFolder: Folder Name (use double backslashes)
// sString1: String to search for
// sString2: String to replace
// Returns: Number of files renamed
function renameFiles(sFolder, sString1, sString2, sString3, sString4) {
var oFSO, oFile, oFolder;
var re, index;
var sName;
var i = 0, n;
oFSO = new ActiveXObject("Scripting.FileSystemObject");
oFolder = oFSO.GetFolder(sFolder);
try {
index = new Enumerator(oFolder.Files);
for (; !index.atEnd(); index.moveNext()) {
oFile = index.item();
sName = oFile.Name;
n = sName.indexOf(sString1);
if(n != -1) {
try {
sName = sName.substring(0, n) + sString4 +
sName.substr(n + sString3.length);
oFile.Name = sName;
i++;
} catch(e) {
WScript.Echo("Can not rename file " + sName + " because\n" + e.description);
}
}
}
index = new Enumerator(oFolder.Files);
for (; !index.atEnd(); index.moveNext()) {
oFile = index.item();
sName = oFile.Name;
n = sName.indexOf(sString3);
if(n != -1) {
try {
sName = sName.substring(0, n) + sString4 +
sName.substr(n + sString3.length);
oFile.Name = sName;
i++;
} catch(e) {
WScript.Echo("Can not rename file " + sName + " because\n" + e.description);
}
}
}
}
catch(e) {
WScript.Echo("Could not access folder " + sFolder + " because\n" + e.description);
return 0;
} finally {
oFSO = null;
re = null;
return i;
}
}
【问题讨论】:
-
你不知道js字符串对象的
replace方法吗?为什么不能使用sName = sName.replace(sString1, sString2);之类的东西? -
是的,让它变得不必要的复杂......
标签: rename batch-processing wsh jscript batch-rename