2015-01-25 1 views
1

파이썬에서는 파일을 사용할 의무가 없습니다. -c "..."을 지정하고 명령 줄에서 문자열을 통해 파이썬 인터프리터에 파이썬 명령을 제공 할 수 있습니다.명령 줄에서 직접 vbscript 명령을 실행할 수 있습니까 (즉, vbs 파일없이)?

vbscript를 사용하여 동일한 결과를 얻을 수 있습니까? 배치 스크립트를 사용해야하는 솔루션을 보았습니다. 하지만 쓰기 권한이없는 시스템에 있다면 어떻게해야합니까?

mshta vbscript:Execute("dim result:result=InputBox(""message"",""title"",""input"")(window.close):echo result") 

을하지만 여전히 콘솔에 결과를 인쇄하지 않습니다

@Syberdoor의 대답에 따라,이 프로그램을 실행할 수 있습니다.

답변

4

mshta.exe가 가능한 한 가지 트릭이 있습니다. 당신은 다음과 같은 코드를 실행할 수 있습니다

mshta vbscript:Execute("<your code here, delimit lines with : (colon)>:close") 

이의 물론 fantasticly 미친 해킹하고 심지어 파일을 생성 할 수 없습니다 시스템에 나는 Mshta.exe의 허용 될 경우 확실하지 않다.

어쩌면 this thread에서 추가 영감을 얻을 수도 있습니다 (mshta 솔루션도 여기에 게시됩니다). 주로 일괄 처리 관련이 있지만 실행중인 VB 코드로 창을 속일 수있는 여러 가지 미친 방법에 대한 훌륭한 개요입니다.

+0

감사합니다. 'mshta vbscript : InputBox ("message", "title", "input") (window.close)' – tinyfiledialogs

+0

하지만 콘솔에서 결과를 출력하는 방법을 모르겠습니다. – tinyfiledialogs

+0

@chafporte'mshta.exe'는 그것을 지원하지 않습니다. 콘솔 출력을 위해서는'cscript.exe'가 필요합니다. –

1

아니요, Windows와 함께 제공되는 통역사 (wscript.execscript.exe)는 지원하지 않습니다. 어디서나 파일을 만들 수 없다면 운이 없어집니다. VBScript 인터프리터가 실행할 수있는 인수로 인수를 변환하는 일종의 래퍼 스크립트가 필요합니다.

NA의 ï

는 접근 방식이 같은 ExecuteGlobal 문 VBScript를을 생성하는 것입니다했습니다 : 큰 따옴표가 인수에 보존되지 않기 때문에

그러나
With WScript.Arguments.Named 
    If .Exists("c") Then ExecuteGlobal .Item("c") 
End With 

, 제대로 작동하지 않을 것이다. 이 같은 위의 스크립트를 실행 한 경우 :

C:\>vbsrunner.vbs /c:"WScript.Echo "foo""

효과적으로 문 대신 WScript.Echo "foo"WScript.Echo foo을 실행하는 것, 그리고 나는 그들이 인수에 보관하고 있도록 중첩 된 따옴표를 탈출 할 수있는 방법을 찾을 수 없습니다.

어떻게 작동하는 임시 파일에 인수를 기록 배치 스크립트이며, 다음 실행하는 VBScript를 인터프리터 파일 :

@echo off 

setlocal 

set "tempfile=%TEMP%\%RANDOM%.vbs" 

>"%tempfile%" echo.%~1 
cscript.exe //NoLogo "%tempfile%" 
del /q "%tempfile%" 

이 같은 명령 줄에서 VBScript를 문을 실행할 수 있습니다 그 방법 :

C:\>vbsrunner.cmd "WScript.Echo "foo" : WScript.Echo "bar"" 
foo 
bar

는 당신이 내 vbsh을 사용할 수 파이썬의 대화 형 모드를 복제하고 싶어하지만 여전히 어딘가에 파일을 생성 할 수있는 기능을 필요로합니다.

관련 문제