Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

embed Javascript in .bat files

Is ther any way to execute javascript from a .bat file or embed the javascript in .bat file.

I need a javascript code to write/read to a file in a local folder.This javascript i should be able to execute it using a .bat.

Is it possible?.

Thanks

SNA

like image 208
SNA Avatar asked Feb 24 '10 11:02

SNA


People also ask

How do I run a Javascript batch file?

var wshShell = new ActiveXObject("WScript. Shell"); wshShell. Run("D:\\dir\\user. bat");

What is %% in a batch file?

Use double percent signs ( %% ) to carry out the for command within a batch file. Variables are case sensitive, and they must be represented with an alphabetical value such as %a, %b, or %c. ( <set> ) Required. Specifies one or more files, directories, or text strings, or a range of values on which to run the command.

How do I append to a batch file?

You need to use ECHO . Also, put the quotes around the entire file path if it contains spaces. One other note, use > to overwrite a file if it exists or create if it does not exist. Use >> to append to an existing file or create if it does not exist.

How do I run a batch file from a website?

Just create a batch file and save in the location where your html file is there. this anchor tag will execute the (test. bat) batch file. After clicking on the link <TEST>, you will get the window prompting to open/save/close, if you will click on open then batch file will be executed.


2 Answers

Follow these two steps to run Javascript in a Windows batch file, either .BAT or .CMD.

First step: add these lines to the beginning of your file

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

Second step: write your Javascript to only use objects that are available in Windows Scripting Host, i.e. use Wscript.Echo() to print output on the standard output.

Here is a complete example ready to run by typing 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("        ------       ")

Just put this in calen.bat or calen.cmd and run it on any reasonably recent Windows. Never struggle with another convoluted batch file again.

like image 121
Michael Dillon Avatar answered Oct 14 '22 09:10

Michael Dillon


Depends on which javascript you mean. You have few options - all the scripts bellow should be saved with .bat extension:

1) JScript that comes with csript.exe:

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

WScript.StdOut.WriteLine("Echo from cscript's javascript");

2) javascript that comes with HTA/IExplorer (which allows you also to use UI elements and access to the local file system):

<!-- :
@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 - may be most powerfull option as gives you access to the .NET framework (though it creates a small .exe file):

@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")

There are ways to use it without creating this exe file ,but this is the most readable way according to me.

4) If you are aming NODE.JS there's also a way:

0</* ::

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

exit /b %errorlevel%


*/0;

console.log('Hello from Node');
like image 34
npocmaka Avatar answered Oct 14 '22 08:10

npocmaka