2011-08-25 5 views
16

Tôi đang cố gắng tìm hiểu làm thế nào để chạy Javascript (thay vì VBScript) Sử dụng cscript.exe, nhưng khi tôi cố gắng, tôi nhận được một lỗi:Chạy Javascript với CScript?

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

tôi thought này là có thể - bất kỳ ý tưởng gì sai ?

Trả lời

5

turns out rằng phần mở rộng .js được không liên quan đến JSFile trong registry. Làm như vậy đã khắc phục được sự cố.

-1

Bạn sẽ có thể chạy lệnh này để sửa lỗi:

regsvr32 %systemroot%\system32\vbscript.dll

+0

Không, không hoạt động ... – Mehrdad

22

Đặt đăng ký bằng regsvr32 không hoạt động đối với tôi. Ngoài ra, tôi không muốn nó, vì tôi muốn .js của tôi được liên kết với một trình soạn thảo văn bản đơn giản.

Nhưng có một dòng lệnh tùy chọn //E cho cscript mà làm cho công việc:

cscript //E:jscript hello.js 
+2

Câu trả lời này là tốt nhất nếu bạn không muốn thay thế liên kết tệp của mình. – mcw0933

23

Một sửa chữa rất đơn giản: sử dụng assoc.

c:\>assoc .js=JSFile 

(Mine đã trở thành gắn liền với một trình soạn thảo văn bản tại một số điểm.)

+0

Tôi đã liên kết .js với trình soạn thảo văn bản có mục đích, rất dễ nhầm lẫn lỗi này với nội dung khác. – b01

0

có vấn đề này, quá, và tôi giải quyết ...

1. xác định vị trí wsh.inf, các tập tin cài đặt cho các cửa sổ máy chủ scripting trong %windir%\inf

2. nhấp chuột phải vào và chọn wsh.infinstall.

1

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

5

Đó là giá trị đề cập rằng rplantiko's solution làm việc ngay cả khi phần mở rộng của tên tập tin không phải là .js. Điều này cho phép đặt mã .js vào tệp .cmd và chạy dưới dạng lô, tạo thành một giải pháp một tệp hoàn toàn di động mà không cần các bước sơ bộ (như assoc).

Ví dụ, nếu bạn tạo một file test.cmd với các nội dung sau đây, bạn sẽ có thể chạy nó bằng cách nhấp vào nó trong Explorer, hoặc bằng cách kéo & thả một file lên biểu tượng của nó:

@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(",")); 

Đường giữa @then ... @end là các lệnh lô được diễn giải bởi cmd.exe. Lệnh cuối cùng là goto :eof để bỏ qua phần còn lại của tệp. Các dòng sau @end được diễn giải bởi cscript.exe.

+0

Rất đẹp!:) Có lẽ 99% mọi người chỉ biết và sử dụng những kiến ​​thức cơ bản về các kịch bản lệnh cmd [1], vì vậy điều này bổ sung thêm một lượng lớn sức mạnh cho rất ít phiền toái. Chắc chắn một cho các bộ sưu tập đoạn, cảm ơn. [1] Ok, đừng làm tôi bừng lên, đó là đỉnh đầu tôi. – randomsock