2010-11-16 46 views
15

Khi tôi đọc và trải nghiệm cho bản thân mình VBScript loại bỏ tất cả các dấu ngoặc kép và đối số. Có ai biết cách này không? Làm thế nào để vượt qua dấu ngoặc kép vào kịch bản?Dấu ngoặc kép trong đối số VBScript

+0

bạn có nghĩa là trong Windows Script Host không? –

Trả lời

1

Chỉnh sửa: Hiểu sai câu hỏi để câu trả lời mới ở đây:

Tôi không nghĩ bạn có thể làm điều đó theo bất kỳ cách nào. Tuy nhiên, một công việc xung quanh có thể là sử dụng thuộc tính CommandLine của lớp Win32_Process, điều này sẽ giúp bạn có được dòng lệnh hoàn chỉnh mà tôi nghĩ.

Ví dụ thử kịch bản này:

Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 
Set processes = wmi.ExecQuery("SELECT * FROM Win32_Process") 
For Each proc in processes 
    If InStr(proc.CommandLine, "double quotes") > 0 Then 
     wscript.echo proc.CommandLine 
    End IF 
Next 

Với các thông số như: "some long commandline enclosed in double quotes here"

+0

Tôi nghĩ rằng @Dani có nghĩa là một tham số cho một tập lệnh, nghĩa là 'cscript.exe test.vbs" tham số "' –

+1

Ý của anh ta là: 'C: \> test.vbs" đối số "'. – Ruel

+0

@Ruel @oracle Cảm ơn, sai lầm của tôi. –

0

Thật không may, tôi không biết bất cứ phương pháp thoát hiểm để vượt qua hai dấu ngoặc kép vì nó là một dấu phân cách lập luận. Tất cả những gì tôi có thể đề xuất là sửa đổi kịch bản của bạn hoặc thêm các dấu ngoặc kép từ đó.

1

Tôi không chắc chắn nếu làm việc này, nhưng khi đi qua thông số tôi đoán bạn có thể làm điều gì đó giống như -

chr(34) + <your argument string> + chr(34) 

Các chr (34) là viết tắt của dấu ngoặc kép.

+1

Điều này, thật không may, chỉ gây ra chuỗi chữ chr (34) xuất hiện dưới dạng tham số (hoặc một phần của tham số). Ví dụ: nếu tham số duy nhất là chr (34) + foo + chr (34) thì thông số được phân tích cú pháp sẽ chính xác. – jveazey

+0

@ John L Veazey - Đó chính xác là những gì OP muốn từ câu hỏi của mình đúng không? Tôi không hiểu ý của bạn. Lấy làm tiếc. –

11

Nếu tham số đòi hỏi dấu ngoặc kép bạn có thể sử dụng một tham số được đặt tên để xác định nó và sau đó kèm theo giá trị với dấu ngoặc kép

dim arg 
if WScript.Arguments.Named.Exists("a") then 
    arg = WScript.Arguments.Named("a") 
    arg = chr(34) & arg & chr(34) 
end if 

và sử dụng như sau:

cscript test.vbs /a:"a parameter" 

nhưng doesn này không giúp đỡ nếu bạn chỉ muốn giữ báo giá nếu được cung cấp. Dấu ngoặc đơn được chấp nhận, do đó bạn có thể sử dụng dấu nháy đơn (hoặc ký tự/chuỗi khác) và thực hiện Replace(arg, "'", chr(34)) để chuyển đổi thành dấu ngoặc kép.

6

Kịch bản này sẽ nhận được dòng lệnh như nó có, với dấu ngoặc kép và tất cả mọi thứ cho một biến gọi là strLine, và hiển thị nó:

Set objSWbemServices = GetObject("WinMgmts:Root\Cimv2") 
Set colProcess = objSWbemServices.ExecQuery("Select * From Win32_Process") 
For Each objProcess In colProcess 
    If InStr (objProcess.CommandLine, WScript.ScriptName) <> 0 Then 
     strLine = Mid(objProcess.CommandLine, InStr(objProcess.CommandLine , WScript.ScriptName) + Len(WScript.ScriptName) + 1) 
    End If 
Next 
WScript.Echo(strLine) 

Vì vậy, chạy rằng với:

cscript scriptname.vbs "option" ""other option"" third option 

sẽ kết quả trong:

"option" ""other option"" third option 
Các vấn đề liên quan