|
|
// Photoshop 图层批量重命名脚本
// 功能:批量重命名选中的图层
// 使用方法:在PS中选中多个图层,运行此脚本
#target photoshop
app.bringToFront();
// 检查是否有文档打开
if (app.documents.length === 0) {
alert("请先打开一个文档");
} else {
var doc = app.activeDocument;
var selectedLayers = getSelectedLayers(doc);
if (selectedLayers.length === 0) {
alert("请至少选中一个图层");
} else {
// 创建对话框
var dlg = new Window("dialog", "批量重命名图层");
dlg.orientation = "column";
dlg.alignChildren = "left";
// 重命名模式选择
var modeGroup = dlg.add("group");
modeGroup.add("statictext", undefined, "重命名模式:");
var mode = modeGroup.add("dropdownlist", undefined, ["添加前缀", "添加后缀", "序号重命名"]);
mode.selection = 0;
// 前缀/后缀输入
var textGroup = dlg.add("group");
textGroup.add("statictext", undefined, "文本:");
var textInput = textGroup.add("edittext", undefined, "图层_");
textInput.characters = 20;
// 序号设置(默认隐藏)
var seqGroup = dlg.add("group");
seqGroup.visible = false;
seqGroup.add("statictext", undefined, "起始序号:");
var startInput = seqGroup.add("edittext", undefined, "1");
startInput.characters = 5;
seqGroup.add("statictext", undefined, "位数:");
var digitsInput = seqGroup.add("edittext", undefined, "2");
digitsInput.characters = 5;
// 模式切换事件
mode.onChange = function() {
textGroup.visible = (mode.selection.index !== 2);
seqGroup.visible = (mode.selection.index === 2);
dlg.layout.layout();
};
// 按钮组
var btnGroup = dlg.add("group");
btnGroup.alignment = "center";
btnGroup.add("button", undefined, "确定").onClick = function() {
doRename(selectedLayers, mode.selection.index, textInput.text, parseInt(startInput.text), parseInt(digitsInput.text));
dlg.close();
};
btnGroup.add("button", undefined, "取消").onClick = function() {
dlg.close();
};
dlg.show();
}
}
// 获取选中的图层
function getSelectedLayers(doc) {
var selectedLayers = [];
try {
var id = charIDToTypeID("Idnt");
var desc = executeActionGet(refEnumerated(id, charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt")));
if (desc.hasKey(stringIDToTypeID("targetLayers"))) {
var list = desc.getList(stringIDToTypeID("targetLayers"));
for (var i = 0; i < list.count; i++) {
var layerDesc = list.getObjectValue(i);
var layerIndex = layerDesc.getInteger(stringIDToTypeID("layerIndex"));
selectedLayers.push(doc.layers[layerIndex]);
}
}
} catch (e) {
// 如果没有选中的图层,返回空数组
}
return selectedLayers;
}
// 执行重命名
function doRename(layers, mode, text, start, digits) {
if (layers.length === 0) return;
app.activeDocument.suspendHistory("批量重命名图层", function() {
for (var i = 0; i < layers.length; i++) {
var layer = layers[i];
switch(mode) {
case 0: // 添加前缀
layer.name = text + layer.name;
break;
case 1: // 添加后缀
layer.name = layer.name + text;
break;
case 2: // 序号重命名
var num = (start + i).toString();
while (num.length < digits) num = "0" + num;
layer.name = num;
break;
}
}
});
alert("已重命名 " + layers.length + " 个图层");
}
|
|