The
program below is both a batch file and a JavaScript WSH console file.
The dual nature of the file is achieved via JavaScript block comments
and the strategy by which the command interpreter searches for target
labels in a batch file.
Save the file below as hybrid.bat.
- rem (
-
-
-
- )
-
-
-
-
- function rem() {
- WScript.StdOut.WriteLine("Hello, world!");
- }
-
-
-
rem ( /*
@echo off
cscript /nologo /e:javascript hybrid.bat
goto end
*/ )
// by Jim Lawless
// This program sample is in the public domain
function rem() {
WScript.StdOut.WriteLine("Hello, world!");
}
/*
:end */
The first line of code is benign for a batch file; the REM command is a single line remark, so it ignores all text after it.
The first line is constructed so that syntactically, it is also the
beginning of a valid JavaScript function call for a function named rem().
Immediately after the first left-parenthesis in the call, a
block-comment is used to mask the next few lines from the WSH
JavaScript interpreter. Batch commands follow on the next three lines,
ending with a goto.
The batch file itself invokes the WSH console interpreter cscript.exe passing in the name of the file ( hybrid.bat
) itself. After invocation of the script as a JavaScript file, the
batch file portion attempts to transfer control to a label named end.
When the command processor attempts to transfer control to a label via the goto
verb, each line of the batch file is examined sequentially until a
matching label is found. Any syntax errors encountered ( the lines of
JavaScript text ) are ignored.
|