执笔论坛

 找回密码
 立即注册
搜索
查看: 9|回复: 0

[PS脚本]图层批量重命名器 - 一键重命名多个图层

[复制链接]

72

主题

73

帖子

519

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
519
发表于 昨天 17:59 | 显示全部楼层 |阅读模式
// 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 + " 个图层");
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|执笔论坛

GMT+8, 2026-3-17 06:31 , Processed in 0.141727 second(s), 18 queries .

Powered by 执笔论坛

Copyright © 2022-2026

快速回复 返回顶部 返回列表