介绍
提供一个函数,可以把内容反馈到Windows 或者 Mac 剪切板
知识点
- 判断是windows 还是 mac
- cmd命令的调用
源码
方法1(不能带\n)
// 名称:复制信息到系统剪切板
// 作者: Adobe 社区
// 源码:https://www.yuelili.com/?p=10424
// from Adobe 社区
function copyToClipboard(string) {
var cmd, isWindows;
// 判断是不是字符串
string = (typeof string === 'string') ? string : string.toString();
isWindows = $.os.indexOf('Windows') !== -1;
//OS的命令
cmd = 'echo "' + string + '" | pbcopy';
//windows的cmd命令
if (isWindows) {
cmd = 'cmd.exe /c start /min /b cmd.exe /c "echo ' + string + ' | clip"';
//cmd = 'cmd.exe /c cmd.exe /c "echo ' + string + ' | clip"';
}
system.callSystem(cmd);
}
// 比如 把AE版本名复制到粘贴板
copyToClipboard(app.buildName)
方法2(不能带\n)
// 使用fs验证
function copyToClipboard(text) {
text = "hello world"
if (Folder.fs === "Windows") {
var cmdCommand = 'cmd.exe /c cmd.exe /c "echo ' + text + ' | clip"';
system.callSystem(cmdCommand);
} else if (Folder.fs === "Macintosh") {
// macOS
var osaCommand = 'echo "' + text + '" | pbcopy';
system.callSystem("osascript -e '" + osaCommand + "'");
} else {
alert("Unsupported operating system.");
}
}
方法3(能带\n)
function copyToClipboard(text) {
// 创建临时文本文件
var tempFile = new File(Folder.temp.fullName + "/temp.txt");
tempFile.open("w");
tempFile.write(text);
tempFile.close();
if (Folder.fs === "Windows") {
var cmdCommand = 'cmd.exe /c cmd.exe /c "type ' + tempFile.fsName + ' | clip"';
system.callSystem(cmdCommand);
} else if (Folder.fs === "Macintosh") {
var osaCommand = 'cat "' + tempFile.fsName + '" | pbcopy';
system.callSystem("osascript -e '" + osaCommand + "'");
} else {
alert("Unsupported operating system.");
}
// 删除临时文件
tempFile.remove();
}
解决一闪而过的CMD,可以试试添加 start /min
cmd = ‘cmd.exe /c start /min cmd.exe /c “echo ‘ + string + ‘ | clip”‘;
Read about [url=https://www.youtube.com/watch?v=Et0iD5kN3Q8]Isekai Anime[/url]
修复可能存在的bug 也就是start多了一个空双引号
cmd = ‘cmd.exe /c start “” /b /min cmd.exe /c “echo ‘ + string + ‘ | clip”‘;
// 如果cmd.exe经常卡死,可以试试另一种调用vbs方法
cmd = ‘mshta vbscript:clipboarddata.setdata(“text”,”‘ + str + ‘”)(close)’;
另外使用 mshta 传递的字符串疑似有字数限制,我初步得出460个字符
如果不想用mshta,那么也可以用回两个cmd,缺点是会有一个一闪而过的CMD窗口
我发现给两个cmd添加start 会有大概率未响应,以前用着也还好,反正非常迷
cmd = ‘cmd.exe /c cmd.exe /c “echo ‘ + string + ‘ | clip”‘;