• ベストアンサー

コマンドプロンプトの出力をVBScript内の変数に代入する

VBScriptからコマンドプロンプトのver | findstr 5.1を実行し、その出力結果をVBScript内の変数に代入したいのですが、どうすればいいでしょうか? Dim WShell Dim result Set WShell = WScript.CreateObject("WScript.Shell") WShell.Run "cmd /c (ver | findstr XP > " & result & ")" MsgBox result とやってもresultには何も入っていませんでした。

noname#200754
noname#200754

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんな感じでしょうか。 Dim WShell Dim result Set WShell = CreateObject("WScript.Shell") Set Exec = WShell.Exec("cmd /c (ver | findstr XP)") ' 処理完了を待機 Do Until Exec.Status WScript.Sleep 100 Loop result = Exec.StdOut.ReadAll MsgBox result 詳しい説明は参考URLで。

参考URL:
http://homepage3.nifty.com/aya_js/wsh/wsh301.htm

関連するQ&A

  • VBAでコマンドプロンプトの結果を変数に代入

    コマンドラインソフトのffmpegを使って、動画の再生時間などを取得したいのですが VBAでコマンドプロンプトの結果を変数に代入する方法について教えてください。 "D:\xxxx\ffmpeg\bin\ffmpeg" -i "d:\xxxx\aaff.mp4" 2>&1 | grep Duration これをコマンドプロンプトで実行すると d:\xxxx\aaff.mp4の再生時間などがコマンドライン上に表示されます。 これを変数に代入するために、 http://officetanaka.net/excel/vba/tips/tips27.htm このページを参考にして Sub Sample1() Dim WSH, wExec, sCmd As String, Result As String Set WSH = CreateObject("WScript.Shell") ''(1) sCmd = """D:\xxxx\ffmpeg\bin\ffmpeg"" -i ""d:\xxxx\aaff.mp4"" 2>&1 | grep Duration" Set wExec = WSH.Exec("%ComSpec% /c " & sCmd) ''(3) Do While wExec.Status = 0 ''(4) DoEvents Loop Result = wExec.StdOut.ReadAll ''(5) MsgBox Result Set wExec = Nothing Set WSH = Nothing End Sub を実行しました。 しかしResultには何の文字列も代入されませんでした。 恐らく、このページのタイトルにもあるように「MS-DOSコマンドの標準出力を取得する」 とあるので、標準出力しか取得できないのではないかと思います。 それでは一般的なコマンドラインソフトの実行結果を変数に代入するにはどうしたら良いでしょうか?

  • ASPからVBScriptの実行

    ASPから下のVBScriptを実行使用とすると "500"Internal Server Error が出力されて困ってます。 へるぷみー Dim objWSHShell Set objWSHShell=WScript.CreateObject("WScript.Shell") objWSHShell.Run "cscript.exe d:\test.bat" objWSHShell=Nothing

  • Vbscriptに詳しいかたがいらっしゃるならぜひ教えてください!

    以下のコードなんですが なぜかwindows2000では何回実行しても 圧縮ファイルができあがりますが windows2003では いつも空のzipファイルが作られてしまいますけど Vbscriptに詳しいかたがいらっしゃるなら ご教授願います。 Dim fso Dim wShell Dim sourceFolderPath Dim sourceFilePath Dim targetFolderPath Dim Shell Dim ie Dim file Dim d Dim sourceFile Dim zipfile Dim zip Dim dFolder Dim ZIPdata:ZIPdata="PK" & Chr(5) & Chr(6) & String(18,0) targetFolderPath="C:\job\VBS\zip\" sourceFilePath ="C:\job\VBS\新しいフォルダ\test1.txt" Set fso=CreateObject("Scripting.FileSystemObject") Set wShell=CreateObject("WScript.Shell") CreateObject("WScript.Shell").Run "explorer.exe",0,True WScript.Sleep 100 Set Shell=CreateObject("Shell.Application") For Each ie In Shell.Windows If Not ie.Busy and ie.ReadyState=4 and InStr(TypeName(ie.Document),"IShellFolderViewDual")=1 Then exit for end if next Set Shell=ie.Document.Application 'set sourceFolder = fso.GetFolder(sourceFolderPath) set sourceFile = fso.GetFile(sourceFilePath) set targetFolder = fso.GetFolder(targetFolderPath) set sourceFile = fso.GetFile(sourceFilePath) d = sourceFile.DateLastModified zipfile=targetFolderPath & "¥" & Year(d) & "-" & Month(d) & "-" & Day(d) & " " & sourceFile.Name & ".zip" fso.CreateTextFile(zipfile).write ZIPdata Set dFolder=Shell.NameSpace(zipfile) Set Folder=Shell.NameSpace(sourceFile.ParentFolder.Path) Set FolderItem=Folder.ParseName(sourceFile.Name) dFolder.CopyHere FolderItem,&H10

  • ApacheをVBAのWshellで起動したい

    WindowsXPに入れたApacheをコマンドプロンプトで次のようにして必要な時だけ起動しています。 CD C:\Program Files\Apache2412\Apache24\bin httpd -k start これをVBAのWshellでやりたいのですが、エラーになってできません 下記どちらでも「Runメソッドは失敗しました」になります Sub Sample_WShell01() Dim ShellObj Set ShellObj = CreateObject("WScript.Shell") ShellObj.Run "CD C:\Program Files\Apache2412\Apache24\bin", 0, true ShellObj.Run "httpd -k start", 0, true End Sub Sub Sample_WShell01() Dim ShellObj Set ShellObj = CreateObject("WScript.Shell") ShellObj.Run "C:\Program Files\Apache2412\Apache24\bin\httpd -k start", 0, true End Sub パスを通しておけば下記でできるのはわかってますが… Sub Sample_WShell01() Dim ShellObj Set ShellObj = CreateObject("WScript.Shell") ShellObj.Run "httpd -k start", 0, true End Sub パスの通ってない状態ではできないのでしょうか、教えてください 書き方だけのような気はしますが…

  • VbScriptからコマンドプロンプトのプログラムを実行する

    Dim driveLetterと定義してあります。 driveLetterには"D:\"を入れてあります。これを使って WShell.Run "cmd /c (robocopy ○○testfolder C:\testfolder /MIR /Z)", 0 を実行してrobocopyをウィンドウを表示させずに実行したいのです。○○の部分にD:\が入ります。 この場合、○○の部分に%driveLetter%を使ってもできませんでした。

  • vbscriptの変数宣言

    教えてください。 プログラム初心者です。 vbscriptで変数をDimで宣言しているものと。Dim無しの変数宣言していないく、 いきなり代入して使っているものもあります。宣言して使うものと使わないものの違いは何でしょうか? よろしくお願いします。

  • Vbscriptエラー

    vbでメッセージBOXを用いてプログラムを起動できるようにしたいのですがエラーが出てしまいます。「インデックスが有効範囲にありません。」 どこが間違っているのでしょうか? ーーーーーーー Dim objWShell Dim a Dim b a = MsgBox (" 「」を利用。"&Chr(13)&Chr(13)&_ "    「」?    "&Chr(13)&Chr(13)&Chr(13)&_ " ---------------------------- "&Chr(13)&_ "  お問い合わせください。" , vbYesNo,"「r」") ' MsgBox vbYes&"="&a If a = vbYes Then Set objWShell = CreateObject("WScript.Shell") b = WScript.Arguments(0) If b = 0 Then objWShell.Run "C:\Windows\System32\notepad.exe" ,vbNormalFocus,False ' End If End If ーーーーー

  • cscriptで文字変数 に ” を入力するには

    お世話になります。 早速ですが、質問があります。 c:\test\test.exe -path "D:\data" -file "aaa.txt" -flag a というコマンドをcscript のプログラムから起動したいのですが、コマンド文字列を文字列変数に代入する方法 がありましたら、教えてください。 Cscript test.vbs %1 ======================================= Dim WshShell Dim oExec Dim Cmd Dim File File = WScript.Arguments(0) Cmd = "c:\test\test.exe -path "D:\data" -file "a.out" -flag " & File                     ↑↑↑↑                  これができません? Set WshShell = CreateObject("WScript.Shell") set oExec = WshShell.Exec(Cmd) Do While oExec.Status = 0 Wscript.Sleep 100 Loop "も文字列に入力するには、どのようにすればいいでしょうか? ご意見、アドバイスよろしくお願いいたします。

  • VBScriptでカレントディレクトリの表示

    VBscriptで自分が今いるカレントディレクトリを変数に代入するにはどうすればいいでしょうか。 VBScriptはG:\にあり(USB上)、そこから起動しています。 Dim driveNameと定義して、driveNameにG:\を代入したいんです。 あとで、msgboxでそれを表示するつもりです。

  • VBscriptでコマンドラインへ発行したい

    VBscriptでコマンドプロンプトを起動させテキストを発行させることで悩んでおります。 コマンドラインのツールを実行させそこへテキストに記述された内容を実行させたいと思っています。 Dim strCOM For i = 1 to 15 strCOM = "cmd /C C:\○○○○\△△△△.exe 'ここがわかりません 'テキストファイルを流したいのですが・・・・ 'コマンド名を仮に@@@@とします。 "@@@@ D:\HEPPOKO" & Right("000" & CStr(i), 4) & ".txt" 'をコマンドライン上に流したいのですが・・・ Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec(strCOM) FileCopy "D:\HEPPOKO" & Right("000" & CStr(i), 4) & ".txt", "D:\終了\HEPPOKO" & Right("000" & CStr(i), 4) & ".txt" 'ここにSleep関数?で5分後とカウントアップにしたいのですが調べてみてもちょっと検討がつかなかったので・・・ '教えていただけないでしょうか? Next

専門家に質問してみよう