2013-07-16 3 views
0

사용자 입력을 받아들이고이를 매개 변수로 명령 줄에 전달하고 결과를 표시하는 스크립트를 만들려고합니다.vbscipt 내에서 명령 줄 인수를 전달합니다.

뭔가 같은 :

Dim WshShell, Return,sctask,arg 

arg=inputbox("Enter the computername") 
Set arg = Wscript.Arguments 
Set WshShell = WScript.CreateObject("WScript.Shell") 

WshShell.Run("C:\schtasks /query /s &arg") 

답변

1

재 :

WshShell.Run("C:\schtasks /query /s &arg") 

(1) VBScript를 사용하면 arg의 내용을 (제대로) 연결하는이, 변수를 보간하지 않습니다

WshShell.Run "C:\schtasks /query /s " & arg 

(WRT @ Ansgar의 글 : arg은 컴퓨터 이름을 보유하고 있다고 가정합니다. (희망적으로) optai 다음 라인

arg=inputbox("Enter the computername") 

에 의해 것을 네드 :

Set arg = Wscript.Arguments 

하는 것은 저작권법과 & -paste - 고블린)

(2) 당신은 사용해서는 안 PARAM 목록 (추가 된) 경우 sub를 호출하거나 리턴 값을받지 않음. 그러니 위의 라인이나

iRet = WshShell.Run("C:\schtasks /query /s " & arg) 

재를 사용 결과를 표시 단지 명령을 실행하고 상태, schtasks의 출력이 .Exec입니다 얻을 수있는 최소 비용/가장 이득 방법을 반환

.Run으로 :

Option Explicit 

Dim oWSH : Set oWSH = CreateObject("WScript.Shell") 
Dim sCmd : sCmd  = "schtasks /Query /S winxpsp3" 
Dim sRes : sRes  = oWSH.Exec(sCmd).Stdout.ReadAll() 
WScript.Echo sRes 

내 데모 조각을 개선하는 방법을 알아 보려면 docs를 사용 - 생산 준비 버전은 몇 가지 오류 처리를해야한다.

.Exec을 사용하지 않으려면 .Run을 사용하고 명령의 출력을 가져 오는 예제 코드는 this answer을 참조하십시오. 뿐만 아니라

2

Ekkehard.Horner는 말 :

ReDim args(WScript.Arguments.Count-1) 
For i = 0 To WScript.Arguments.Count-1 
    If InStr(WScript.Arguments(i), " ") > 0 Then 
    args(i) = Chr(34) & WScript.Arguments(i) & Chr(34) 
    Else 
    args(i) = WScript.Arguments(i) 
    End If 
Next 

WshShell.Run "C:\schtasks /query /s " & Join(args, " ") 
:

Set arg = Wscript.Arguments 
... 
WshShell.Run "C:\schtasks /query /s " & arg 

당신은이 같은 재 구축 인수 문자열을 수행해야합니다 간단한 문자열과 같은 모음 (WScript.Arguments)를 추가 할 수 없습니다

또한 에는 보통 schtasks 실행 파일이 없습니다.

관련 문제