web-dev-qa-db-ja.com

Visual Basicスクリプトでコマンドラインを実行する必要がある

オペレーティングシステムのバージョンを確認するには、VBSでコマンド "ver"を実行する必要がありますが、その方法がわかりません。

私はこれを試しましたが、うまくいきません:

Function ExecuteWithTerminalOutput(cmd)
Set Shell = WScript.CreateObject("WScript.Shell")
Set Exec =  Shell.Exec("ver")
End Function
9
user1528355

このようなものを試してください:

Dim objShell
Set objShell = WScript.CreateObject ("WScript.Shell")
objShell.run "cmd /c ver"
Set objShell = Nothing

編集:

それでは、出力をファイルにリダイレクトしてから、ファイルを読み取ることができます。

return = WshShell.Run("cmd /c ver > c:\temp\output.txt", 0, true)

Set fso  = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("c:\temp\output.txt", 1)
text = file.ReadAll
file.Close
13
David Kroukamp

ファイルに出力を書き込まずにこれを行う方法があります。

たとえば、ディレクトリリストのテキストをキャプチャしたいとします。 (これよりも多くの優れた方法がありますが、私は単純な例を使用しています。)

VBScriptで以下の関数を使用すると、次のように入力できます。

thisDir = getCommandOutput("cmd /c dir c:")

上記の行が実行されると、変数「thisDir」にはDIRコマンドからの出力が含まれます。

出力が必要なコマンドの中には、コマンドシェル(上記の "cmd/c"の部分)を介して渡す必要があるものもあれば、シェルなしで直接実行すると正常に動作するものもあります。コマンドShellなしで試してください。失敗した場合は、Shellコマンドで試してください。

'
' Capture the results of a command line execution and
' return them to the caller.
'
Function getCommandOutput(theCommand)

    Dim objShell, objCmdExec
    Set objShell = CreateObject("WScript.Shell")
    Set objCmdExec = objshell.exec(thecommand)
    getCommandOutput = objCmdExec.StdOut.ReadAll

end Function
22
Dim Shell
Set Shell= WScript.CreateObject ("WScript.Shell")
Shell.Exec"cmd /c ver"
Set Shell= Nothing
0
Shaminda