お世話になります~♪

VBであるソフト(ツール)を作っています。
途中でボタンをクリックして「jikkou.bat」を実行したいと考えています。

可能なのでしょうか?また、どのようにしてやればいいでしょうか?

いろいろやってみましたが、うまくいかないんです。
宜しくお願いいたします。

A 回答 (2件)

メモ帳で


cd c:\windows
dir "c:\my documents"
calc
exit
を入力し、my documentsにaaa.batと名をつけ保存しました。
Private Sub CommandButton1_Click()
MsgBox "aaa実行"
Shell "c:\my documents\aaa.bat", vbNormalFocus
MsgBox "終了"
End Sub
を作り、ボタンをクリックしました。
実行され電卓が現われたりしました。
これでは良くご存知で質問するほどではないかと思うので、どの辺りにお困りですか。
    • good
    • 0

http://www7.plala.or.jp/imajo/ke/samp/samp06.html

このURLの一番下のサンプルが参考になると思います。
Shellという関数を利用します。
がんばってください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QShell関数からバッチファイルを起動後に、バッチファイルが終了するまで待ちたい。

はじめまして。
掲題の通り、VB.netからshell関数を用いてバッチファイルを起動します。
その後、そのバッチファイルが終了してログファイルの出力を完了した後に、
ファイルを開いて確認したいのです。
thread.sleepなどで大体このくらいかなという時間を待ってみる、
などのやり方しか今は思いつかないのですが、
何か明確にバッチファイルの終了を受け取れる方法は無いものでしょうか。

どなたかご存知の方がいらっしゃいましたらご教授ください。

Aベストアンサー

Shell関数より Processクラスで実行したほうが簡単に待てますよ

Dim oPro as Process
oPro = Process.Start("..\..\a.bat")
oPro.WaitForExit()
MessageBox.Show("Hello")

といった具合です

QVBからBATファイルを起動して戻り値の取得方法

VBからBATファイルを起動して戻り値(エラーコード)を
もらうにはどうすれば良いのでしょうか?
WshShellという関数を使用することは、何となく分かるのですが
宜しければサンプルを教えていただけないでしょうか?

Aベストアンサー

>WScript.CreateObjectの
>ところで"オブジェクトが必要です"となってしまいます。

VBのときは、CreateObjectですね。

QVBフォームアプリケーションにおけるcmdプロンプトの実行

OSはwin8.1 64bitです。

VBフォームアプリケーション上に設置したコマンドボタンを押すだけで
コマンドプロンプトからwindowsエクスペリエンスインデックスを実行したいと考えているのですが、
Windowsから直接立ち上げたコマンドプロンプトに「winsat formal -restart clean」と
入力すると問題なく始まるものの、
VBフォームから実行すると、「'winsat' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません」とエラーが出ます。

Dim ShellObj
ShellObj = CreateObject("WScript.Shell")
Call ShellObj.Run("cmd.exe /k winsat formal -restart clean")

Windowsから直接立ち上げる際、管理者権限を使用しなくても
問題なく走るため、管理者権限は関係ないと考えて良いのでしょうか?

また、どういった記述であればWindowsエクスペリエンスが実行できるでしょうか?
出来ればバッチやスクリプトは使用したくありません。

よろしくお願いいたします。

OSはwin8.1 64bitです。

VBフォームアプリケーション上に設置したコマンドボタンを押すだけで
コマンドプロンプトからwindowsエクスペリエンスインデックスを実行したいと考えているのですが、
Windowsから直接立ち上げたコマンドプロンプトに「winsat formal -restart clean」と
入力すると問題なく始まるものの、
VBフォームから実行すると、「'winsat' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません」とエラーが出ます。

Dim S...続きを読む

Aベストアンサー

ユーザー名を指定しないと、なぜかDirで出て来ませんでした。
(少し調べれば、分かるかもしれませんが・・・)
以下で、起動しました。環境は、VB2008でやってみました。
テストしながらしてるので、注釈が入っております。



Dim strUserName As String = "UserName"'Windowsのユーザー名
Dim strPassText As String = "Password" 'パスワード
Dim prss1 As New System.Diagnostics.Process
Dim secStr As New System.Security.SecureString
For Each c As Char In strPassText
secStr.AppendChar(c)
Next

With prss1
With .StartInfo
'出力を読み取れるようにする
.UseShellExecute = False
'.RedirectStandardOutput = True
'.RedirectStandardInput = False
'ウィンドウを表示しないようにする
.CreateNoWindow = False 'True:非表示

.UserName = strUserName
.Password = secStr

''UACダイアログが親プログラムに対して表示されるようにする()
'.ErrorDialog = True
'.ErrorDialogParentHandle = Me.Handle

'作業フォルダを指定する
.WorkingDirectory = "C:\WINDOWS\System32"

'.Verb = "runas" '管理者実行
.FileName = "cmd.exe"
'.Arguments = """/K Dir C:\WINDOWS\System32\winsat*"""
.Arguments = "/K WinSAT.exe formal -restart clean"

End With

.Start()


'終了するまで待つ
.WaitForExit()

.Close()

End With

ユーザー名を指定しないと、なぜかDirで出て来ませんでした。
(少し調べれば、分かるかもしれませんが・・・)
以下で、起動しました。環境は、VB2008でやってみました。
テストしながらしてるので、注釈が入っております。



Dim strUserName As String = "UserName"'Windowsのユーザー名
Dim strPassText As String = "Password" 'パスワード
Dim prss1 As New System.Diagnostics.Process
Dim secStr As New System.Security.SecureString
For Each c As Char In s...続きを読む

QVB.NETでのDOSコマンドを実行について

VB.NETでのDOSコマンドを実行について

いつも大変お世話になっています。
VB.NET上でバイナリデータを
DOSコマンド「copy」で結合させたいのですが
うまくいきません。ご助言ください。

Dim results As String
Dim psi As New System.Diagnostics.ProcessStartInfo()

'ComSpecのパスを取得する
psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")

'出力を読み取れるようにする
psi.RedirectStandardInput = False
psi.RedirectStandardOutput = True
psi.UseShellExecute = False

'ウィンドウを表示しないようにする
psi.CreateNoWindow = True

'コマンドラインを指定("/c"は実行後閉じるために必要)
psi.Arguments = _
"/c copy /b /y "C:\Program Files\test\Data\out0001.bin"+"C:\Program Files\test\Data\out0002.bin" "C:\Program Files\test\Data\TEST.jpg""
'※コマンドの前後のダブルクォーテーションを省き、コマンドプロンプトで
' 直接実行した場合は成功しました。

'起動
Dim p As System.Diagnostics.Process=_
System.Diagnostics.Process.Start(psi)

'出力を読み取る
results = p.StandardOutput.ReadToEnd

'出力された結果を表示
Console.WriteLine(results)

'WaitForExitはReadToEndの後である必要がある
'(親プロセス、子プロセスでブロック防止のため)
p.WaitForExit()

VB.NETでのDOSコマンドを実行について

いつも大変お世話になっています。
VB.NET上でバイナリデータを
DOSコマンド「copy」で結合させたいのですが
うまくいきません。ご助言ください。

Dim results As String
Dim psi As New System.Diagnostics.ProcessStartInfo()

'ComSpecのパスを取得する
psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")

'出力を読み取れるようにする
psi.RedirectStandardInput = False
psi.RedirectStandardOutput = True
psi.UseShellExecute = False

'ウィン...続きを読む

Aベストアンサー

どんなエラーになってますか?

おそらく
"/c copy /b /y "
までで文字列
C:\Program Files\test\Data\out0001.bin
が文字列の外
"+"
が文字列
C:\Program Files\test\Data\out0002.bin
が文字列の外
...
となっているのではないかと思います。

"/c copy /b /y ""C:\Program Files\test\Data\out0001.bin""+""C:\Program Files\test\Data\out0002.bin"" ""C:\Program Files\test\Data\TEST.jpg"""

と"から"の間に"を書きたいときは、""と2つ続けるはずです。
(最後が3つなのは、前の2つは"を文字列に入れるため、最後の一つは文字列の終りです)


それか、いっそCOPYコマンドを使わず、VBだけでファイルの読み書きするかです。

QVB.NETで他のEXEを実行させる

VB.NETで他のEXEを実行させる以下の2つの方法が知りたいです。

1)perlのsystemのように実行完了後に制御が戻る

2)perlのexecのように実行完了後に制御が戻らない

あと、この2つの使い分けのコツ(用途)が知りたいです。

Aベストアンサー

http://jeanne.wankuma.com/tips/vb.net/process/
こちらの8番と9番をどうぞ。

使い分けですが、
実行完了を待って次の処理をする必要がある場合は、制御が戻るまで待つ、そうでないものはキックして終わり、です。

QVBプログラムから「管理者として実行」したい

コマンドプロンプトで実行したいコマンドが
「route add ***.***.***.*** mask 255.255.255.255 ***.***.***.***」 (*は、任意のIP)
だとします。

XPでは問題ないですが、Vista以降だと、管理者権限が必要なコマンドのため、
そもそもコマンドプロンプト自体を「管理者として実行」モードで起動する必要があります。

上記を、手作業で行う場合は、それで解決しますが、
同じ事を、VBのコードから実行したい場合、
System.Diagnostics.Process.Start
を使い、(以下サンプルコード)
---------------------------
Dim psi As New System.Diagnostics.ProcessStartInfo()

psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
psi.UseShellExecute = False
psi.CreateNoWindow = True
psi.Arguments = "/c route add ***.***.***.*** mask 255.255.255.255 ***.***.***.***"

Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi)
p.WaitForExit()

-----------------------------------------------------------

とすると、XPでは、管理者権限を問われないので実行できますが、
Vista以降だと、コマンドが管理者権限で実行されていないためか実行が完了せず、コマンドの内容も行われていません。(route addコマンドの記述にミスは無いとします。)

Vista以降の場合、手作業で、コマンドプロンプトを右クリックして「管理者として実行」を選んで起動し、コマンドを実行するのと同じ事を、
VBのコードから行うには、どうしたらいいのでしょうか?
分かる方、教えてください。お願いします。

コマンドプロンプトで実行したいコマンドが
「route add ***.***.***.*** mask 255.255.255.255 ***.***.***.***」 (*は、任意のIP)
だとします。

XPでは問題ないですが、Vista以降だと、管理者権限が必要なコマンドのため、
そもそもコマンドプロンプト自体を「管理者として実行」モードで起動する必要があります。

上記を、手作業で行う場合は、それで解決しますが、
同じ事を、VBのコードから実行したい場合、
System.Diagnostics.Process.Start
を使い、(以下サンプルコード)
---------------------------...続きを読む

Aベストアンサー

http://www.atmarkit.co.jp/fdotnet/dotnettips/954uacrunas/uacrunas.html

QVB.NETでコマンドプロンプトの操作

VB.NET2005を使用しています。
コマンドプロンプトを起動し、コーディングで操作したいのですが
どのようにすればよいのでしょうか?

行いたいことは、手動で以下を行ったイメージです。
1)コマンドプロンプトを起動
2)「cd c:\」のような文字列を入力し、Enterを押す

Aベストアンサー

System.Diagnostics.Processと AppActivate、SendKeysを使う事になりそうです

何かのイベントで
  Dim oCmd As New System.Diagnostics.Process
  oCmd.StartInfo.UseShellExecute = True
  oCmd.StartInfo.FileName = "cmd.exe"

  oCmd.Start()
  ' コマンドプロンプトが起動するまで待つ
  ' 引数は適宜修正してください
  Threading.Thrad.Sleep( 200 )
  ' 起動したコマンドプロンプトのタイトル名を引数にする
  AppActivate( "c:\windows\System32\cmd.exe" )
  SendKeys.SendWait( "cd c:\{Enter}" )

といった具合でしょう

Qフルパスから最後のディレクトリ名を取得したい。

vb.netなのですが、例えば
c:\aaa\bbb\ccc\ddd\eee\fff.exe
というフルパスがあったとして、
eeeというディレクトリ名を取得したいのですが、
何か良い方法はないでしょうか。
それぞれのディレクトリ名の文字数や階層数は
決まっていないのですが、オススメの方法が
ありましたら、教えて頂けると助かります。

Aベストアンサー

MessageBox.Show(IO.Path.GetFileName(IO.Path.GetDirectoryName(myPath)))

IO.Path の GetDirectoryName でフォルダのフルパスを取得して、さらに IO.Path の GetFileName で最終フォルダ(またはファイル)の名前を取得。

Qバッチへ値を返す

バッチファイルからVB作成のEXEファイルを起動させて、EXEの結果をバッチファイルに出力するにはどのような処理をすればよいでしょうか?

Aベストアンサー

#2です。
VB6でしたね

ただ単に OS側に終了コードを返すだけなら

以下のHPの情報が役に立つのでは

■[VB-TIPS] VBでプログラム終了コードを返すには
  → http://d.hatena.ne.jp/chaichanPaPa/20071104/1194147591
  
  
◆プログラムの終了コードを取得する
  → http://jeanne.wankuma.com/tips/vb6/process/exitcode.html
  
#2 の方法は何か処理を行った値を渡したいときに有効です。
VB.NET 2005 で作成しましたが VB6 のソースに書き換えれば同じことができるはずです。 #2の方法で 終了コードを結果出力するように
してあげれば OSに結果コードを渡したのと同じ動作をするバッチファイルも作れます。 

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報