Illustrator 的 JSX 脚本输出文件名问题

2022-10-19 12:07:42 +08:00
 Lxcm
//
这是一个 Illustrator 的脚本,此脚本将实际日期或实际时间或文件名等插入到文档中的预定义位置。

我现在想输出的文件名可以选择性输出内容。

例如我的文件名:1.05.07.1908 能源参数页-V1(GLEM)GGI-UT0260E-0106 SS

在 AI 文件里一个地方放:1.05.07.1908 ,一个地方放:能源参数页-V1(GLEM)GGI-UT0260E-0106 SS

所以我想增加 2 个功能,
只输出文件名前面数字部分:1.05.07.1908 (这串数字和.是固定这么长的,12 个字符?不是程序员不太懂)
只输出文件名数字后面部分:能源参数页-V1(GLEM)GGI-UT0260E-0106 SS

我在 var content = content.replace(/\{FILENAME\}/,docname)后增加.slice(0,12)
可以单一的实现运行{FILENAME}得到:1.05.07.1908
或者 var content = content.replace(/\{FILENAME\}/,docname)后增加.slice(12)
运行{FILENAME}得到:能源参数页-V1(GLEM)GGI-UT0260E-0106 SS ,
但这不是我想要的结果。

我想能否定义一个{FILENAME2}得到:1.05.07.1908 ,
定义一个{FILENAME3}得到:能源参数页-V1 (GLEM)GGI-UT0260E-0106 SS ,
是不是缺少判断语句?

因为我不是程序员,所以我也只会简单的改下一点参数之类的东西,所以想问下有人会修改吗?或者其他方法也行不一定跟着我思路走,可能我想法和你们不一样。下面是用到的脚本代码,可能运行在 Illustrator 上的不怎么规范,有人有空能否帮忙看下怎么改,先谢谢了。

//

// -------------------------------------------------------------------

var language="en"; // "de" fuer Deutsch

// -------------------------------------------------------------------

var WR="WR-DateAndTime v0.9\n\n";

var AIversion=version.slice(0,2);

if (language == "de") {

var format_preset = "{FILENAME}{FILEEXT} ({DATE} - {TIME})";

var MSG_unsetmark = WR+"Dieses Objekt ist als aktuelles Datum/Uhrzeit markiert, soll die Markierung aufgehoben werden?";
var MSG_setmark = WR+"Soll dieses Textobjekt als aktuelles Datum/Uhrzeit markiert werden?";
var MSG_askformat = WR+"Soll das Textobjekt als Datum/Uhrzeit formatiert werden? Formate:\n{DATE}, {TIME}, {FILE}, {FILEPATH}, {FILENAME} und {FILEEXT}:"
var MSG_editformat = WR+"Datums-/Uhrzeitformat bearbeiten (Leer = entfernen). Formate:\n{DATE}, {TIME}, {FILE}, {FILEPATH}, {FILENAME} und {FILEEXT}:"
var MSG_notexto = WR+"Kein Textobjekt!";
var MSG_selectedmany = "Zum Markieren als aktuelles Datum/Uhrzeit darf nur ein Textobjekt ausgew\xE4hlt sein und falls Sie die Daten aktualisieren wollen, darf kein Objekt ausgew\xE4hlt sein.";
var MSG_nodocs = WR+"Kein Dokument ge\xF6ffnet."
var Timeformat = 24;
var TimeSep = ":";
var AM = " am";
var PM = " pm";
var Dateformat = "dd.mm.yyyy";

} else {

var format_preset = "{FILENAME} ({DATE}, {TIME})";

var MSG_unsetmark = WR+"This object is marked as actual date'n'time, do you want to remove the mark?";
var MSG_setmark = WR+"Do you want to mark the selected textobject as actual date'n'time?";
var MSG_askformat = WR+"Do you want to mark the textobject as actual date'n'time? Formats:\n{DATE}, {TIME}, {FILE}, {FILEPATH}, {FILENAME} and {FILEEXT}:"
var MSG_editformat = WR+"Edit date'n'time (empty = remove). Formats:\n{DATE}, {TIME}, {FILE}, {FILEPATH}, {FILENAME} and {FILEEXT}:"
var MSG_notexto = WR+"No textobject!";
var MSG_selectedmany = "To mark as actual date'n'time, you have to select only one textobject. If you want to update the date'n'time-objects, there must be no object selected.";
var MSG_nodocs = WR+"You have no open document."
var Timeformat = 12;
var TimeSep = ":";
var AM = " am";
var PM = " pm";
var Dateformat = "mm/dd/yyyy";

}

var error=0;

if (documents.length<1) {
error++;
alert(MSG_nodocs)
}

if (error < 1) {
date_n_time();
}

function TodayDate()
{
var Today = new Date();
var Day = Today.getDate();
var Month = Today.getMonth() + 1;
var Year = Today.getYear();
var PreMon = ((Month < 10) ? "0" : "");
var PreDay = ((Day < 10) ? "0" : "");
if(Year < 999) Year += 1900;

var theDate = Dateformat.replace(/dd/,PreDay+Day);
theDate = theDate.replace(/mm/,PreMon+Month);
theDate = theDate.replace(/d/,Day);
theDate = theDate.replace(/m/,Month);
theDate = theDate.replace(/yyyy/,Year);
theDate = theDate.replace(/yy/,Year.toString().substr(2,2));

return theDate;
}

function TodayTime()
{
var Today = new Date();
var Hours = Today.getHours();
var Minutes = Today.getMinutes();
var Suffix = "";
if (Timeformat == 12) {
if (Hours >= 12 ) {
Suffix = PM;
} else {
Suffix = AM;
}
if (Hours >= 13) {
Hours = Hours - 12;
}
if (Hours < 1) {
Hours = Hours + 12;
}
}
var PreHour = ((Hours < 10) ? "0" : "");
var PreMin = ((Minutes < 10) ? "0" : "");
return PreHour+Hours+TimeSep+PreMin+Minutes+Suffix;
}

function DateUpdate(Name) {
var docpath = activeDocument.path.fsName;
var docname = activeDocument.name.replace(/(.*?)(?:\.([^.]+))?$/,'$1');
var extension = activeDocument.name.replace(/(.*?)(?:(\.[^.]+))?$/,'$2');
if (docpath.slice(2,3) == "\\") {
docsep = "\\";
} else {
docsep = ":";
}
var content = Name.slice(11);
var content = content.replace(/\{FILE\}/,docpath+docsep+docname);
var content = content.replace(/\{FILEPATH\}/,docpath);
var content = content.replace(/\{FILENAME\}/,docname);
var content = content.replace(/\{FILEEXT\}/,extension);
var content = content.replace(/\{DATE\}/,TodayDate());
var content = content.replace(/\{TIME\}/,TodayTime());
return content;
}

function date_n_time()
{
if (selection.length == 1) {
if (selection[0].typename == "TextArtItem" || selection[0].typename == "TextFrame") {
if (selection[0].name.slice(0,11) == "actualDate:") {
dateformat = selection[0].name.slice(11);
Check = false;
if (AIversion == "10") {
Check = confirm( MSG_unsetmark );
} else {
dateformat = prompt(MSG_editformat, dateformat);
}
if(dateformat != "" && Check) {
selection[0].contents = selection[0].name.slice(11);
selection[0].name="";
selection[0].selected = false;
}
if(dateformat == "" && !Check) {
selection[0].name="";
selection[0].selected = false;
}
if(dateformat && dateformat !="" && !Check) {
selection[0].name="actualDate:"+dateformat;
selection[0].contents = DateUpdate(selection[0].name);
}
} else {
dateformat = selection[0].contents;
if(dateformat.search(/\{DATE\}/) == -1 && dateformat.search(/\{TIME\}/) == -1 && dateformat.search(/\{FILE[A-Z]*\}/) == -1) dateformat = format_preset;
Check = false;
if (AIversion == "10") {
Check = confirm( MSG_setmark );
} else {
dateformat = prompt(MSG_askformat, dateformat);
}
if (dateformat || Check) {
selection[0].name="actualDate:"+dateformat;
selection[0].contents = DateUpdate(selection[0].name);
selection[0].selected = false;
}
}
} else {
alert ( MSG_notexto );
}
} else if (selection.length > 1) {
alert ( MSG_selectedmany );
} else {
if (AIversion == "10") {
var textArtItems = activeDocument.textArtItems;
for (var i = 0 ; i < textArtItems.length; i++)
{
if (textArtItems[i].name.slice(0,11) == "actualDate:") {
textArtItems[i].selected = true;
textArtItems[i].contents = DateUpdate(textArtItems[i].name);
}
}
} else {
var textFrames = activeDocument.textFrames;
for (var i = 0 ; i < textFrames.length; i++)
{
if (textFrames[i].name.slice(0,11) == "actualDate:") {
textFrames[i].selected = true;
textFrames[i].contents = DateUpdate(textFrames[i].name);
}
}
}
}
}
1410 次点击
所在节点    JavaScript
3 条回复
zcf0508
2022-10-19 12:38:25 +08:00
没细看代码,不过这样应该可以

var format_preset = "{FILENAME} ({DATE}, {TIME})";
->
var format_preset = "{FILENAME1} {FILENAME2} ({DATE}, {TIME})";


var content = content.replace(/\{FILENAME\}/,docname);
- >
var content = content.replace(/\{FILENAME1\}/,docname.slice(0, 12));
var content = content.replace(/\{FILENAME2\}/,docname.slice(12));
Lxcm
2022-10-19 13:17:39 +08:00
@zcf0508 谢谢,增加这 2 行可以了,还以为要插入很多代码才行,一直没敢直接加上试试
var content = content.replace(/\{FILENAME1\}/,docname.slice(0, 12));
var content = content.replace(/\{FILENAME2\}/,docname.slice(12));
Lxcm
2022-10-19 13:37:50 +08:00
@zcf0508 还有个问题,能否在文件名:能源参数页-V1(GLEM)GGI-UT0260E-0106 SS 上用()()括号来判断换行呢?
变成:
能源参数页-V1
(GLEM)
GGI-UT0260E-0106 SS

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/888070

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX