2011-08-25 24 views
16

estoy tratando de aprender cómo ejecutar Javascript (en lugar de VBScript) usando CScript.exe, pero cuando lo intento, obtener un error:¿Está ejecutando Javascript con CScript?

cscript temp.js 
Input Error: There is no script engine for file extension ".js". 

I thought esto es posible - ni idea de lo que está mal ?

Respuesta

5

Se turns out que la extensión .js no se asoció con JSFile en el registro. Al hacerlo, se solucionó el problema.

-1

Usted debe ser capaz de ejecutar este comando para corregir el error:

regsvr32 %systemroot%\system32\vbscript.dll

+0

No, no funcionó ... – Mehrdad

22

Establecer el registro con regsvr32 no funcionó para mí. Además, no lo quiero, ya que quiero que mi .js se vincule con un editor de texto sin formato.

Pero hay una opción de línea de comandos para //E cscript que hace el trabajo:

cscript //E:jscript hello.js 
+2

Esta respuesta es mejor si no desea reemplazar su asociación de archivos. – mcw0933

23

Una solución muy simple: utilizar assoc.

c:\>assoc .js=JSFile 

(mina había llegado a ser asociado con un editor de texto en algún momento.)

+0

Había asociado .js con el editor de texto a propósito, es muy fácil confundir este error con otra cosa. – b01

0

tenido este problema, también, y resuelto ...

1.- localice wsh.inf, el archivo de instalación para windows Scripting Host en %windir%\inf

2.- haga clic derecho en wsh.inf y selecciona install.

1

Assoc Js = JSfile ftype jsfile = C: \ Windows \ System32 \ Cscript.exe "% 1" % *

5

Vale la pena mencionar que rplantiko's solution funciona incluso si la extensión del nombre de archivo no es .js. Esto permite colocar el código .js en un archivo .cmd y ejecutarse como un lote, formando una solución de un solo archivo que es totalmente portátil sin pasos preliminares (como assoc).

Por ejemplo, si crea un archivo test.cmd con el siguiente contenido, usted será capaz de ejecutarlo simplemente haciendo clic en él en el Explorador, o arrastrando & soltar otro archivo sobre su icono:

@if (@CodeSection == @Batch) @then 
    @cscript //Nologo //E:jscript "%~f0" "test arg" %* & pause & goto :eof 
@end 
WScript.Echo("hello world"); 
for (var i = 0, n = WScript.Arguments.Length, args = []; i < n; ++i) 
    args.push(WScript.Arguments(i)); 
WScript.Echo("arguments: " + args.join(",")); 

Las líneas entre @then ... @end son comandos por lotes interpretados por cmd.exe. El último comando es goto :eof para omitir el resto del archivo. Las líneas después de @end son interpretadas por cscript.exe.

+0

¡Muy bonito!:) Probablemente el 99% de las personas solo conocen y usan los conceptos básicos de los scripts de cmd [1], por lo que esto agrega una gran cantidad de energía para muy poco alboroto. Definitivamente uno para la colección de fragmentos, gracias. [1] Ok, no me llame, eso está fuera de mi cabeza. – randomsock

Cuestiones relacionadas