在.bat文件中嵌入Javascript

时间:2010-02-24 11:04:04

标签: javascript batch-file

是否可以从.bat文件执行javascript或将javascript嵌入.bat文件中。

我需要一个javascript代码来写/读到本地文件夹中的文件。这个javascript我应该能够使用.bat执行它。

有可能吗?。

由于

SNA

8 个答案:

答案 0 :(得分:12)

按照以下两个步骤在Windows批处理文件(.BAT或.CMD)中运行Javascript。

第一步:将这些行添加到文件的开头

@set @junk=1 /*
@echo off
cscript //nologo //E:jscript %0 %*
goto :eof
*/

第二步:编写Javascript以仅使用Windows Scripting Host中可用的对象,即使用Wscript.Echo()在标准输出上打印输出。

通过输入calen 2011 02

,这是一个准备好运行的完整示例
@set @junk=1 /*
@echo off
cscript //nologo //E:jscript %0 %*
goto :eof
*/
x = WScript.Arguments
Yr = x(0) ; Mo = x(1)

YS = "JanFebMarAprMayJunJulAugSepOctNovDec"
MN = Mo<1 || Mo>12 ? Mo : YS.substr(3*Mo-3, 3) // Month Name
WScript.echo(" ", Yr, "         ", MN)
WScript.echo(" Mo Tu We Th Fr Sa Su")
WD = new Date(Yr, Mo-1, 1).getDay() ;
if (WD==0) WD = 7 // Week Day Number of 1st
LD = new Date(Yr, Mo, 0).getDate() // Last Day of month
Wk = "" ; for (D=1 ; D < WD ; D++) Wk += "   "

for (D=1 ; D<=LD ; D++) {
  Wk = Wk + " " + (D<10 ? "0"+D : D) ; WD++
  if ((WD==8) || (D==LD)) { WScript.echo(Wk) ; WD = WD-7 ; Wk = "" }
  }

WScript.echo("        ------       ")

将它放在calen.bat或calen.cmd中,然后在任何合理的Windows上运行它。 永远不要再与另一个复杂的批处理文件斗争。

答案 1 :(得分:1)

在Windows上,在批处理文件中,尝试

cscript js file.jsp>

答案 2 :(得分:1)

我知道我有点迟了,但是如果你的系统上安装了node.js,你可以使用bat文件调用节点函数并执行你的javascript代码。

https://nodejs.org/en/

Node.js(使用模块时)可以让你做很多bat文件可以做的事情。只使用javascript,您可以编辑/短语本地文件,运行exe文件等...等等。

设置此步骤的分步指南将是: 1)下载并安装node.js https://nodejs.org/en/download/ 2)使用您要运行的js代码在计算机上创建一个javascript文件。 在此文件中,您将添加代码以允许node.js访问计算机上的本地文件。将以下代码放在javascript文件的顶部:

//Load required modules
fs = require('fs')

//Function to read local files
fs.readFile('path-to-file/this-is-my-file.txt', 'utf8', function (err,data) {
  if (err) {

    return console.log(err);
  }
  //data is the text file
}

3)创建一个这样的bat文件:

echo off

node "path-to-javascript\index.js"

你们都安装好了!

答案 3 :(得分:1)

取决于您指的是哪种JavaScript。您几乎没有选择-以下所有脚本都应以.bat扩展名保存:

1) csript.exe随附的JScript:

@if (@X) == (@Y) @end /*
@cscript //E:JScript //nologo "%~f0" "%*"
@exit /b %errorlevel%
*/

WScript.StdOut.WriteLine("Echo from cscript's javascript");
HTA / IExplorer随附的

2) javascript(它还允许您使用UI元素并访问本地文件系统):

<!-- :
@echo off
mshta.exe "%~f0"
exit /b %errorlevel%
-->

<html>
<head>
<title>~~~~</title>
<!--meta http-equiv="X-UA-Compatible" content="IE=edge"--> 
</head>
<body>

<font size="15"><b>Hello from HTA's javascript</b></font>
    <script type="text/javascript">
        setTimeout(function() {
            document.body.innerHTML=document.body.innerHTML + "<p/><p><font size='7'>Hello from HTA's javascript</font></p>";;
        }, 2000);
    </script>
</body>
</html>

3) JSCrip.NET-可能是功能最强大的选项,因为它使您可以访问.NET框架(尽管它会创建一个小的.exe文件):

@if (@X)==(@Y) @end /* JScript comment
@echo off
setlocal

for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d  /o:-n "%SystemRoot%\Microsoft.NET\Framework\*jsc.exe"') do (
   set "jsc=%%v"
)

if not exist "%~n0.exe" (
    "%jsc%" /nologo /out:"%~n0.exe" "%~dpsfnx0"
)

%~n0.exe %*

endlocal & exit /b %errorlevel%


*/

import System;
Console.Write("Echo from .NET")

有很多方法可以不创建该exe文件而使用它,但这对我来说是最易读的方法。

4)如果您要命名NODE.JS,那么还有一种方法:

0</* ::

@echo off

    echo hello from batch
    node "%~f0" %*

exit /b %errorlevel%


*/0;

console.log('Hello from Node');

答案 4 :(得分:0)

您可以使用基于命令行的脚本主机CScript.exe从批处理文件运行JScr​​ipt脚本。

您需要将该脚本放在一个单独的文件中,您可以将该脚本作为参数传递给CScript.exe。如果要将所有内容保存在sinle文件中,可以将JScript代码嵌入批处理文件中,将其转储到临时文件中,然后传递给CScript.exe并删除临时脚本文件。

可能有更优雅的解决方案(希望如此)

答案 5 :(得分:-1)

sort of。当然,仅限Windows。

尽管如此,可能有更好的方法来做到这一点。你需要JavaScript做什么?为什么它必须是JavaScript?

答案 6 :(得分:-2)

简答:不。

Javascript(从浏览器运行时)无法访问客户端资源(这是设计使然,以避免安全风险)。

您可以使用浏览器的 来创建脚本,但是您应该提供有关您尝试执行的操作的详细信息(以及您希望在其上运行的操作系统)。< / p>

另外,请查看this page了解详情。

答案 7 :(得分:-2)

您可以使用基于命令行的脚本主机CScript.exe从批处理文件运行JScr​​ipt脚本。

您需要将该脚本放在一个单独的文件中,您可以将该脚本作为参数传递给CScript.exe。如果要将所有内容保存在单个文件中,可以将JScript代码嵌入批处理文件中,将其转储到临时文件中,然后传递给CScript.exe并删除临时脚本文件。

可能有更优雅的解决方案(希望如此)