【AE脚本】案例:把信息传递到系统剪贴板

介绍

提供一个函数,可以把内容反馈到Windows 或者 Mac 剪切板

知识点

  1. 判断是windows 还是 mac
  2. 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();
}

给TA充电
共{{data.count}}人
人已充电
AE开发脚本开发

【AE脚本】案例:如何用脚本实现True Duplicate

2020-4-8 21:27:40

AE开发脚本开发

【AE脚本】案例:移除所选图层的所有表达式

2020-4-8 22:53:11

5 条回复 A文章作者 M管理员
  1. 芊葉狼七

    解决一闪而过的CMD,可以试试添加 start /min
    cmd = ‘cmd.exe /c start /min cmd.exe /c “echo ‘ + string + ‘ | clip”‘;

  2. Read about [url=https://www.youtube.com/watch?v=Et0iD5kN3Q8]Isekai Anime[/url]

  3. 芊葉狼七

    修复可能存在的bug 也就是start多了一个空双引号
    cmd = ‘cmd.exe /c start “” /b /min cmd.exe /c “echo ‘ + string + ‘ | clip”‘;

  4. 芊葉狼七

    // 如果cmd.exe经常卡死,可以试试另一种调用vbs方法
    cmd = ‘mshta vbscript:clipboarddata.setdata(“text”,”‘ + str + ‘”)(close)’;

  5. 芊葉狼七

    另外使用 mshta 传递的字符串疑似有字数限制,我初步得出460个字符
    如果不想用mshta,那么也可以用回两个cmd,缺点是会有一个一闪而过的CMD窗口
    我发现给两个cmd添加start 会有大概率未响应,以前用着也还好,反正非常迷
    cmd = ‘cmd.exe /c cmd.exe /c “echo ‘ + string + ‘ | clip”‘;

个人中心
今日签到
搜索