如何修改Photoshop脚本为theArray1、theArray2添加弹窗输入提示
Photoshop 批量文本替换脚本(支持弹窗输入替换规则)
修改说明
原脚本的查找、替换值为硬编码,本次修改新增弹窗输入能力,无需每次改动脚本代码即可自定义替换规则,同时新增输入校验避免异常。
使用步骤
- 运行脚本后,第一个弹窗输入所有需要查找的文本,多个内容用英文逗号分隔,例:
username,部门,工号 - 第二个弹窗输入和查找内容顺序对应的替换值,多个内容同样用英文逗号分隔,例:
李明,技术部,10086 - 脚本自动遍历当前所有打开的PS文档内的所有文本图层(包含嵌套在图层组内的文本图层)完成批量替换
完整修改后代码
// 批量替换文本图层内容 // 2013 原始版本,修改后支持弹窗输入替换规则 #target photoshop if (app.documents.length > 0) { for (var n = 0; n < app.documents.length; n++) { app.activeDocument = app.documents[n]; app.activeDocument.suspendHistory("批量替换文本", "main()"); } } // 核心执行逻辑 function main () { var myDocument = app.activeDocument; var theLayers = collectTextLayers(myDocument, []); if (theLayers.length <= 0) { alert("当前文档未检测到文本图层,脚本终止"); return; } // 弹窗获取查找关键词 var findInput = prompt("请输入要查找的所有文本,多个用英文逗号分隔:", "username"); if (findInput === null || findInput.trim() === "") { alert("未输入查找内容,脚本终止"); return; } var theArray1 = findInput.split(",").map(item => item.trim()); // 弹窗获取对应替换值 var replaceInput = prompt("请输入对应顺序的替换值,多个用英文逗号分隔:", "姓名"); if (replaceInput === null || replaceInput.trim() === "") { alert("未输入替换内容,脚本终止"); return; } var theArray2 = replaceInput.split(",").map(item => item.trim()); // 校验规则数量是否匹配 if (theArray1.length !== theArray2.length) { alert("查找内容和替换值的数量不匹配,脚本终止"); return; } // 执行替换 for (var a = 0; a < theLayers.length; a++) { for (var b = 0; b < theArray1.length; b++) { var theString = theLayers[a].textItem.contents; while (theString.indexOf(theArray1[b]) != -1) { theString = theString.replace(theArray1[b], theArray2[b]); } theLayers[a].textItem.contents = theString; } } } // 递归收集所有文本图层 function collectTextLayers (theParent, allLayers) { if (!allLayers) { var allLayers = new Array(); } for (var m = theParent.layers.length - 1; m >= 0;m--) { var theLayer = theParent.layers[m]; if (theLayer.typename == "ArtLayer") { if (theLayer.kind == LayerKind.TEXT) { allLayers.push(theLayer); } } else { allLayers = collectTextLayers(theLayer, allLayers); } } return allLayers; }
内容的提问来源于stack exchange,提问作者aichaun
相关产品推荐
相关产品推荐

