2012-11-02 38 views
9

Hiện tại chúng tôi đang sử dụng các tệp lệnh Windows Batch (DOS) để kiểm soát luồng quy trình của chúng tôi. Để hiển thị các thông báo tới Console, chúng ta sẽ sử dụng lệnh ECHO. Những thông điệp này sẽ hiển thị trong phần mềm Scheduler của chúng tôi, vốn từng là Tivoli và bây giờ là CA WA Workstation \ ESP.Tương đương với Lệnh Batch ECHO bằng VBScript là gì?

Tôi muốn bắt đầu sử dụng tệp VBS thay vì tệp CMD \ BAT và đang cố gắng tìm ra cách thực hiện tương đương với ECHO cho bảng điều khiển.

Khi tôi cố gắng sử dụng lệnh WScript.Echo hoặc ghi vào Standard Out, các thông báo được hiển thị trong hộp thoại cho cả hai và chúng yêu cầu nút OK được đẩy để tiếp tục. Không ngạc nhiên, khi tôi chạy không cần giám sát mặc dù một người lên lịch, công việc này truy cập vào một trong các lệnh này và chỉ bị treo vì không có ai để OK hộp thư.

SET FS = CreateObject("Scripting.FileSystemObject") 
SET StdOut = FS.GetStandardStream(1) 
StdOut.Write("Test 1") 

WScript.echo("Test 2") 

Tôi nhận ra tôi có thể viết các thông điệp vào một tập tin Log bằng cách sử dụng đối tượng Scripting, nhưng điều này có thể thất bại nếu một con đường không hợp lệ được cung cấp hoặc do không đủ quyền. Bên cạnh đó, việc có thể xem phản hồi viết bên trong Trình lập lịch biểu rất thuận tiện.

Làm cách nào để ghi vào Bảng điều khiển bằng VBScript? Tôi đã thấy các bài đăng khác ở đây cho thấy rằng các phương pháp trên không hoạt động vì lý do mô tả ở trên là cách để thực hiện.

+0

tôi rất muốn giới thiệu chuyển sang PowerShell thay vì VBScript. –

Trả lời

10

wscript.echo là lệnh đúng - nhưng để xuất ra bàn điều khiển thay vì đối thoại, bạn cần chạy tập lệnh bằng cscript thay vì wscript.

Bạn có thể giải quyết điều này bằng cách

  • chạy script của bạn từ dòng lệnh như sau:

    cscript myscript.vbs 
    
  • thay đổi hiệp hội tập tin mặc định (hoặc tạo ra một phần mở rộng tập tin mới và hiệp hội cho những kịch bản bạn muốn chạy với cscript).

  • thay đổi động cơ thông qua các lựa chọn kịch bản máy chủ (ví dụ như mỗi http://support.microsoft.com/kb/245254)

    cscript //h:cscript //s 
    
  • Hoặc bạn có thể thêm một vài dòng để bắt đầu kịch bản của bạn để buộc nó để chuyển đổi "động cơ" từ wscript để cscript - xem http://www.robvanderwoude.com/vbstech_engine_force.php (sao chép dưới đây):

    RunMeAsCScript 
    
    'do whatever you want; anything after the above line you can gaurentee you'll be in cscript 
    
    Sub RunMeAsCScript() 
         Dim strArgs, strCmd, strEngine, i, objDebug, wshShell 
         Set wshShell = CreateObject("WScript.Shell") 
         strEngine = UCase(Right(WScript.FullName, 12)) 
         If strEngine <> "\CSCRIPT.EXE" Then 
           ' Recreate the list of command line arguments 
           strArgs = "" 
           If WScript.Arguments.Count > 0 Then 
             For i = 0 To WScript.Arguments.Count 
               strArgs = strArgs & " " & QuoteIt(WScript.Arguments(i)) 
             Next 
           End If 
           ' Create the complete command line to rerun this script in CSCRIPT 
           strCmd = "CSCRIPT.EXE //NoLogo """ & WScript.ScriptFullName & """" & strArgs 
           ' Rerun the script in CSCRIPT 
           Set objDebug = wshShell.Exec(strCmd) 
           ' Wait until the script exits 
           Do While objDebug.Status = 0 
             WScript.Sleep 100 
           Loop 
           ' Exit with CSCRIPT's return code 
           WScript.Quit objDebug.ExitCode 
         End If 
    End Sub 
    
    'per Tomasz Gandor's comment, this will ensure parameters in quotes are covered: 
    function QuoteIt(strTemp) 
         if instr(strTemp," ") then 
           strTemp = """" & replace(strTemp,"""","""""") & """" 
         end if 
         QuoteIt = strTemp 
    end function 
    
+2

Tôi tình cờ gặp vấn đề tương tự, sử dụng JS. Việc kiểm tra wscript/cscript là thanh lịch hơn nhiều ở đó: 'if (! WScript.FullName.match (" cscript.exe ")) {...}'. (hoặc có thể thêm một '$' vào regexp, chỉ trong trường hợp). Tôi không chạy lại tập lệnh - chỉ thay đổi độ dài tùy thuộc vào công cụ được sử dụng. BTW, trong ví dụ trên: những gì về đối số thoát/trích dẫn? Nó sẽ làm việc với các đối số có chứa không gian? Aha! –

+0

Điểm tốt - Tôi vừa sao chép và dán mã từ trang web được tham chiếu - hiện đã gõ một bản sửa lỗi nhanh cho kịch bản đó (tức là thêm chức năng QuoteIt). Nice tip trên mặt trận JS quá. Cảm ơn @TomaszGandor. – JohnLBevan

+1

@JohnLBevan -0.499 cho thiết kế của hàm QuoteIt (sử dụng WScript.Arguments toàn cục (i) thay vì thông số strTemp). –

Các vấn đề liên quan