Câu hỏi Có thể tạo một VBScript thực thi một tập lệnh batch trong chính nó không?


Tôi biết nó có vẻ kỳ lạ, nhưng ý tưởng của tôi là tạo một tệp văn bản chứa VBScript và Batch Script bên trong nó, tức là nếu tôi chạy tập lệnh đó dưới dạng VBScript, nó tự gọi là tập lệnh Batch và tập lệnh batch đó thực hiện các tác vụ cmd.exe.

Tôi biết bạn có thể sử dụng phương thức .ShellExecute và sau đó chạy nhiều dấu phẩy bằng cách sử dụng CMD / C [...], nhưng điều này hơi khó đọc.

Thử của tôi là:

If False Then
  goto batchLines
End If
[...VBScript continues here...]
Wscript.Quit
:batchLines
[...batch Script starts here...]

Nhưng như được dự đoán, nó không hoạt động chút nào.


1
2017-07-08 21:53


gốc


nếu có thì nó có thể phức tạp hơn việc shell thực hiện với cmd / c như thế nào Có lẽ nó có thể đặt chuỗi trên nhiều dòng, và sau đó thực thi shell cmd /c str hoặc xây dựng một số chuỗi str mà tạo nên một kịch bản lô, ghi nó vào một tập tin temp tạm thời, sau đó làm shell thực thi cmd / c batchscript. Nó không phải là những gì bạn yêu cầu chính xác, nhưng nó chỉ là một cách khác để nhận được lô và vbscript - barlop
Nó có thể dễ dàng được thực hiện ngược lại. Xem stackoverflow.com/q/9074476/1012053 - đặc biệt, chú ý đến giải pháp WSF. Có lẽ bạn có thể biến nó trên đầu của nó để có VBS gọi chính nó như là một tập lệnh batch, nhưng kịch bản phải có một phần mở rộng .BAT (hoặc .CMD) nếu bạn muốn nó chạy theo lô. Điều này có nghĩa là bạn phải gọi VBS bằng CSCRIPT với //E:VBS Tùy chọn. - dbenham
Đây là một jscript / batch lai được viết bởi dbenham / dave benham. jrepl.bat dostips.com/forum/viewtopic.php?f=3&t=6044 - barlop


Các câu trả lời:


Điều ngược lại là có thể (thực hiện một đợt chạy VB script) điều này là một ví dụ.

@set @junk=1 /*
@echo off
REM Add Batch Stuff Here
if "%1" == "MOARBATCH" goto :MOARBATCH
cscript //nologo //E:jscript %~f0 %*
goto :eof */
// Add VBS stuff here
Wscript.Quit
/*
:MOARBATCH
REM More Batch Stuff Here
REM */

Bạn có thể đi hạt với điều này nhưng AFAIK bạn cần phải bắt đầu với một tập tin thực thi để tận dụng lợi thế của các quirks xử lý tập tin hàng loạt mà điều này sử dụng. BTW, điều này thường được gọi là một tập tin batch lai.


0
2017-07-08 22:17



cảm ơn bạn. Tôi muốn thực hiện một kịch bản như thế này, bởi vì tôi cần chạy một lô yêu cầu các đặc quyền cao hơn (chạy với tư cách quản trị viên). Vì vậy, vbScript có thể yêu cầu đặc quyền cao hơn, sau đó chạy "giao diện điều khiển lệnh" (mà không cần mở một cửa sổ giao diện điều khiển mới)? - Pablo
Bằng cách này, tôi nhận thấy rằng bạn sử dụng JScript và cũng là một tính năng của ngôn ngữ này (multiline bình luận), do đó, có vẻ như kịch bản này nên được viết bằng javascript chỉ. - Pablo
Các tập tin batch lai VBScript là có thể nhưng chúng thậm chí còn bị tấn công nhiều hơn. Nếu có thể tôi sẽ đi với JScript. Bạn có thể muốn sử dụng tất cả các giải pháp Batch. Tôi sẽ viết một cái cho bạn khi tôi tìm thấy một cái đã được tạo ra: stackoverflow.com/a/28467343/932549 - krowe