将JS代码嵌入批处理文件中

时间:2015-12-28 22:50:03

标签: javascript batch-file

我有一个批处理文件,通过重命名和重新定位来准备word文件。 所以我使用我在本网站上找到的javascript代码为这些文件制作pdf。我称之为如下;

for %%g in ("test\*.doc") do (cscript.exe //nologo "SAVEASPDF.js" "%%~fg") 

此JavaScript代码位于另一个文件saveaspdf.js中以制作PDF。 我可以在批处理文件中嵌入一个JS代码(例如作为:FUNCTION),以便只将所有代码保存在一个文件中吗?

这是我试图嵌入的JS,我在这个网站上找到了它。

var fso = new ActiveXObject("Scripting.FileSystemObject");
var docPath = WScript.Arguments(0);
docPath = fso.GetAbsolutePathName(docPath);

var pdfPath = docPath.replace(/\.doc[^.]*$/, ".pdf");
var objWord = null;

try
{
    WScript.Echo("Saving '" + docPath + "' as '" + pdfPath + "'...");

    objWord = new ActiveXObject("Word.Application");
    objWord.Visible = false;

    var objDoc = objWord.Documents.Open(docPath);

    var wdFormatPdf = 17;
    objDoc.SaveAs(pdfPath, wdFormatPdf);
    objDoc.Close();

    WScript.Echo("Done.");
}
finally
{
    if (objWord != null)
    {
        objWord.Quit();
    }
}

3 个答案:

答案 0 :(得分:2)

发布了许多方法,用于在批处理脚本中嵌入和执行JScr​​ipt。以下是一些:

  1. https://stackoverflow.com/a/15169687/1012053
    这是我的最爱,我将在下面使用

  2. https://stackoverflow.com/a/4999378/1012053
    我不喜欢这种方法,因为它定义了一个额外的(不需要的)环境变量。

  3. https://stackoverflow.com/a/15176096/1012053(编辑前)
    另一个很好的选择。

  4. https://stackoverflow.com/a/9074483/1012053(最后更新2014-04-27在底部)
    这种WSF技术不太方便,但功能强大,因为您可以在单个批处理脚本中嵌入和执行任意数量的独立JScript和/或VBS作业。

  5. 因此,您可以使用选项1.将两个脚本合并为一个文件:

    @if (@X)==(@Y) @end /* Harmless hybrid line that begins a JScript comment
    
    :: ******* Begin batch code *********
    @echo off
    for %%g in ("test\*.doc") do cscript //E:JScript //nologo "%~f0" "%%~fg"
    exit /b
    
    ********* Begin JScript code **********/
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var docPath = WScript.Arguments(0);
    docPath = fso.GetAbsolutePathName(docPath);
    
    var pdfPath = docPath.replace(/\.doc[^.]*$/, ".pdf");
    var objWord = null;
    
    try
    {
        WScript.Echo("Saving '" + docPath + "' as '" + pdfPath + "'...");
    
        objWord = new ActiveXObject("Word.Application");
        objWord.Visible = false;
    
        var objDoc = objWord.Documents.Open(docPath);
    
        var wdFormatPdf = 17;
        objDoc.SaveAs(pdfPath, wdFormatPdf);
        objDoc.Close();
    
        WScript.Echo("Done.");
    }
    finally
    {
        if (objWord != null)
        {
            objWord.Quit();
        }
    }
    

答案 1 :(得分:0)

试试这个:

ECHO 'YOUR_JS_CODE' | node

http://www.robvanderwoude.com/redirection.php

答案 2 :(得分:-1)

如果您查看cscript.exe的{​​{3}},它似乎想要从文件中读取脚本,所以我相信您在这里运气不佳。

如果您的脚本与nodejs兼容,那么通过nodejs运行它作为lleaff建议可能有效,但由于您使用documentation自动执行Word,因此无法执行。