【VB.NET】コマンドプロンプトの操作について

このQ&Aのポイント
  • VB.NETを使用してコマンドプロンプトの操作方法を学びたいです。具体的には、コマンドプロンプトの起動とディレクトリの移動を行いたいのですが、うまくいきません。
  • VB.NETでコマンドプロンプトの操作方法を学ぶため、参考になるコーディングを見つけました。しかし、コマンドプロンプトの起動後、ディレクトリの移動がうまく行えません。
  • VB.NETを使用してコマンドプロンプトを操作しようとしていますが、うまくいきません。コマンドプロンプトの起動とディレクトリの移動を行うための正しいコーディング方法を教えてください。
回答を見る
  • ベストアンサー

【VB.NET】コマンドプロンプトの操作について

 今晩は、質問させていただきます。どうぞよろしくお願いいたします。  環境: VB2008 Express Edition + Win7(もしくはVistaもしくはXP)  でございます。  VBからコマンドプロンプト(あまり使い方を存じません)を操作できているかどうか テストする為に、下記のように操作させてみましたがうまくいきません。。   ・Debugフォルダにコマンドプロンプトを起動    →コマンドプロンプトの内容表示(←成功)   ・Debugフォルダにコマンドプロンプトを起動    →「cd ../ 」    →コマンドプロンプトの内容表示(←何故か何も表示されません。)  http://soudan1.biglobe.ne.jp/qa5873147.html を参考にさせていただいて、コーディングいたしました↓   Dim psi As New System.Diagnostics.ProcessStartInfo()   psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")   psi.RedirectStandardInput = False '出力を読み取れるようにする   psi.RedirectStandardOutput = True   psi.UseShellExecute = False   psi.CreateNoWindow = True 'ウィンドウを表示しないようにする    'コマンドラインを指定   psi.Arguments = "/c cd ../"  '←ここです。   Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi) '起動   Threading.Thread.Sleep(1000)   Do     results = p.StandardOutput.ReadLine     temp = temp & results     Application.DoEvents()     cnt = cnt + 1   Loop Until cnt = 1000   p.WaitForExit()   MsgBox(temp)  最後のMsgBoxに何も文字が表示されません。。。  コード中の「ここです」の行をコメントアウトいたしますと、最後のMsgBoxに 「Microsoft Windows XP ~D:\~bin\Debug>」 とフォルダ名が表示できます。  psi.Arguments = "/c cd ../" がちゃんと送れていないのでございましょうか??  色々と試行錯誤しておりますが、うまくいきません。 試しにpsi.CreateNoWindow = False などとしてみても一瞬で画面が消えてしまうため うまくバグ取りの打開策が見いだせておりません。  もしお詳しい方がいらっしゃいましたら是非ともアドバイスいただけないでしょうか。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

CMDのヘルプとかをよく読みましょう。 /C は「以降に書かれたものをコマンドとして実行して終了する」オプションです。 この例では、 CMD起動→cd .. を実行→終了 となっています。 そのままコマンドプロンプトを継続するなら /K ではないでしょうか。 これに限らず、他のコマンドを実行させるなら、そのコマンドのマニュアルを良く読みましょう。

linelan
質問者

お礼

 どうもありがとうございます!!m(_ _)m  解決いたしました。Googleで「コマンドプロンプト "/C"」などと 検索いたしましても「/」が検索結果にひっかかってくれず かなり長い間悩みました。。。orz  今から徹底的に探してまいります。 この度はご親切にご閲覧・アドバイスくださって誠にありがとうございました!!^^

関連するQ&A

  • VB.NETでDOSコマンドの複数実行

    VB.NETでバッチファイルを使わずにDOSコマンドの複数実行をしたいのですが、 試しに Dim results As String 'ComSpecのパスを取得する psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec") '出力を読み取れるようにする psi.RedirectStandardInput = False psi.RedirectStandardOutput = True psi.UseShellExecute = False 'ウィンドウを表示しないようにする psi.CreateNoWindow = True 'コマンドラインを指定("/c"は実行後閉じるために必要) 'psi.Arguments = "/c " & asCmd & " /w" psi.Arguments = "/c " & "CD C:\" & " /w" '起動 p = System.Diagnostics.Process.Start(psi) '出力を読み取る results = p.StandardOutput.ReadToEnd '出力された結果を表示 Console.WriteLine(results) psi.Arguments = "/c " & "DIR" & " /w" '起動 p = System.Diagnostics.Process.Start(psi) '出力を読み取る results = p.StandardOutput.ReadToEnd '出力された結果を表示 Console.WriteLine(results) 'WaitForExitはReadToEndの後である必要がある '(親プロセス、子プロセスでブロック防止のため) p.WaitForExit() というプログラムを作成したのですが、DIRは実行されるのですが、 Cドライブに移動ができません。   何が悪いのでしょうか? 実現できる方法があればご教授ください。

  • コマンドプロンプトの出力をテキストボックスへ表示する方法について

    コマンドプロンプトの出力をテキストボックスへ表示する方法について 現在、VBを使ったプログラミングを行っています。 以下に質問内容を示しますので、回答を宜しくお願いします。 <環境> OS:Windows XP 開発ソフト:VB2008 express edition 質問:コマンドプロンプトの出力をテキストボックスへ表示する方法について リダイレクトを使って、コマンドプロンプトの出力結果をVBのフォーム上(テキストボックス) に表示したいのですが、常に出力が更新されるコマンドの場合、実行後にフリーズが起きてしまいます。 以下の例ではpingを送っていますが、テキストボックスには常にコマンドの出力結果が更新されません。(実行が終わるまで待つ必要がある) 理想としては、pingコマンドを実行したときの結果が、そのままテキストボックス上にリアルタイムに表示されることです。 リアルタイムにテキストボックスにコマンドプロンプトの結果を表示するには、 どのような設定が必要になるのでしょうか? ご教授願います。宜しくお願いします。 ----- 以下サンプルソース ----- Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 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 ping 192.168.1.1" '起動 Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi) '出力を読み取る results = p.StandardOutput.ReadToEnd '出力された結果を表示 TextBox1.Text = results 'WaitForExitはReadToEndの後である必要がある '(親プロセス、子プロセスでブロック防止のため) p.WaitForExit() End Sub End Class

  • VB.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()

  • PDFの印刷で。。。

    C#よりAcrobatReaderにPDFをエクスポートして印刷を行う処理 を作成中です。 そこで質問ですが,エクスポートされたPDFを印刷する際に、 PDFを開かずに印刷することは可能でしょうか? 現在、ネットよりいろいろ調べて組み込んだロジックでは印刷をする ことはできましたが、どうしてもPDFが開かれてしまいます。 ソースを以下に載せましたのでご教授願います。 System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(); //パスを取得する psi.FileName = @"C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe"; //出力を読み取れるようにする psi.RedirectStandardInput = false; psi.RedirectStandardOutput = true; psi.UseShellExecute = false; //ウィンドウを表示しないようにする psi.CreateNoWindow = true; //コマンドラインを指定 psi.Arguments = @"/t " + Application.StartupPath + "\\PDFExpt.PDF"; System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi); //出力を読み取る string results = p.StandardOutput.ReadToEnd(); p.WaitForExit(); p.Close(); p.Dispose(); 申し訳ありませんがよろしくお願い致します。

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

    コマンドプロンプトで実行したいコマンドが 「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のコードから行うには、どうしたらいいのでしょうか? 分かる方、教えてください。お願いします。

  • C#でcabファイルをつくる2

    質問者は追記ができないようなので、新しく質問させていただきます。 あるHPを参考に、makecab.exeにパラメータを渡して 動かす方法を行ったのですが、 エラーが出てしまい行き詰っています。 どこがおかしいのでしょうか? ●エラー内容(下記コードのretの値) ------------------------------------------------------------ Microsoft (R) Cabinet Maker - Version 5.1.2600.5512 Copyright (c) Microsoft Corporation. All rights reserved.. 0.00% - list.txt (1 of 1) 100.00% - list.txt (1 of 1) 0.00% [flushing current folder] 80.56% [flushing current folder] ERROR: (FCIFlushCabinet)Failure creating or writing cabinet file: permission denied ------------------------------------------------------------ ●コード  list.txt というファイルを a.cab に圧縮する ------------------------------------------------------------ string cmd = @"c:\WINDOWS\system32\makecab.exe"; string trCmd = @"C:\cabTest\work\list.txt a.cab"; System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(); psi.FileName = cmd; psi.RedirectStandardInput = false; psi.RedirectStandardOutput = true; psi.UseShellExecute = false; psi.CreateNoWindow = true; psi.Arguments = trCmd; System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi); string ret = p.StandardOutput.ReadToEnd(); p.WaitForExit(); ------------------------------------------------------------ 以下、最初の質問 ------------------------------------------------------------- あるファイルをcabファイルに圧縮(まとめる?)する方法を考えています。 (例えば、a.txt,b.txtをまとめてab.cabにする) Zipの圧縮であれば、 ZipOutputStreamを使ってているサンプル等があるのですが、 それに相当するものがあるのでしょうか? それとも「makecab」コマンドを投げる方法がよいでしょうか? -------------------------------------------------------------

  • C# コマンドプロンプト画面で表示された文字の取得

    Windowsフォームアプリケーションからコマンドプロンプトを起動して、コマンドを実行した際に出る出力をフォームアプリケーション側から受け取ろうとしています。 テスト内容では成功するのですが、受け取りたい対象の内容は取得できずに困っています。 例えばコマンドプロンプト上で hoge と入力し実行すると 「'hoge' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 と表示されます。 しかし、前述カッコ内の表示をアプリケーション側から受け取ることが出来ませんでした。 どのようにすれば受け取ることができるでしょうか? 単純な path などを実行した場合は受け取れました。 以下が試した内容です。 Process ps = new Process(); ps.StartInfo.FileName = Environment.GetEnvironmentVariable("ComSpec"); ps.StartInfo.Arguments = @"/C hoge"; ps.StartInfo.UseShellExecute = false; ps.StartInfo.RedirectStandardOutput = true; ps.StartInfo.CreateNoWindow = true; ps.Start(); string output = ps.StandardOutput.ReadToEnd(); ps.WaitForExit(); ps.Dispose(); MessageBox.Show(output);//空の内容しか表示されない //テストで hoge を path にした際はシステム環境変数が表示された ・環境 Windows 7 Professional 64bit VC# 2010 Express よろしくお願いいたします。

  • 【VB2005】コンソールアプリ実行時のコマンドプロンプトの非表示方法

    22歳男性です。 vb2005で開発してます。 コンソールアプリケーション実行時に表示されるコマンドプロンプトを非表示(タスクバーにも表示されない)にしたいのですがやり方がわかりません。 私が調べたところ「System.Diagnostics.Process」クラスを使用すると外部アプリ(コマンドプロンプトなど)の操作はできるようです。ですが、私は外部アプリの操作ではなく、実行ファイル自身が実行時に表示するコマンドプロンプトを非表示にしたいので、「System.Diagnostics.Process」クラスでは実現不可と考えています。 それと、このことを実現するために、新たに実行ファイルを作るのではなく、あくまで既存の実行ファイルに「コマンドプロンプトを非表示にする」コードを埋め込むことを理想としています。そのため、実行ファイルが2つ以上になる(実際に実行するファイルと、その実行ファイルのコマンドプロンプトを操作する実行ファイル)ような考えは求めてません。 もし知っている方がいらっしゃいましたら、「使用するクラス」「具体的なコード」などを記述していただけたらありがたいです。 宜しくお願いします。

  • C#.net FTPでホームディレクトリより上へ

    いつもお世話になっております。 C#.netでWebClientやFtpWebRequestを使用して FTPツールを開発していますが、ホームディレクトリより上の階層を参照する方法が見つかりません。 流れとしてはプロキシ サーバーまたはファイアウォールを経由してあるサーバにアクセスして一つ上の階層にあるフォルダにデータを送たいのです。アクセス権限はあります。 また、DOBONさんのところや他の方のプログラムなどを参考にしてプログラムからコマンドプロンプトを操作してFTPを使用してみようと思いましたがフリーズして上手くいきませんでした。 string[] strCmds = {@"/c ftp", @"/c localhost"@"/c user",@"/c password" }; for ( int i = 0; strCmds.Length; i++ ) { psi.Arguments = strCmds[i]; System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi); string results = p.StandardOutput.ReadToEnd(); p.WaitForExit(); Console.WriteLine(results); } このプログラムの修正方法、または他の方法がありましたら教えていただけるとありがたいです。

  • コマンドプロンプトを使用して・・・・・

    こんばんは。教えて下さい。Windowa X/P SP2用の起動フロッピーディスク を直接、実行でなく解凍して中のファイルを取り出しかたんですが・・・ 出来ないため、コマンドプロンプトを使用して取り出す方法を教わりましたが、↓ コマンドプロンプトが表示されたら、その状態のまま、エクスプローラで [OSがインストールされているドライブ名]:\Documents and Settings\[ユーザー名]\Local Settings\Tempを開く。 実行したくてもCを押すとコマンドプロンプトが消えてしまいます。 どなたか教えて下さい。

専門家に質問してみよう