C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: cmd.exeでping結果をcsvに書き込む


(過去ログ 113 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■66917 / inTopicNo.1)  cmd.exeでping結果をcsvに書き込む
  
□投稿者/ miti (1回)-(2013/06/05(Wed) 21:47:02)

分類:[C#] 

C#/windows7

こんばんは。
cmd.exeでIPアドレスを入力しpingで送信して接続できたかどうかの結果をcvsファイルに書き込みしたいです。

cmd.exeでping送信するコードは作成できましたが、cmd.exeの結果をラベル1に接続できた→OK、できない→NGを受け取って
結果をCVSファイルに

 IPアドレス   結果
24.36.254.236   OK
35.165.24.255   NG
   ・      ・
   ・      ・
   ・      ・

のような形式で書き込みしたいです。(またはcmd.exeの結果を直接CVSファイルに書き込みもOK)
いろいろインターネットで調べましたが、
思い通りに結果は出てなかったです。
コードを教えてもらえますか?
よろしくお願いします。
引用返信 編集キー/
■66918 / inTopicNo.2)  Re[1]: cmd.exeでping結果をcsvに書き込む
□投稿者/ Hongliang (59回)-(2013/06/05(Wed) 22:34:54)
ping.exe自体はcmd.exeを経由させずとも実行可能ですが、cmd.exeにこだわる理由はなにかあるのでしょうか?

>(またはcmd.exeの結果を直接CVSファイルに書き込みもOK)
ping.exeの結果は特にcsv形式ではないですし複数行にわたることになると思いますが、どう書き出されたらOKなんでしょう。

> cmd.exeの結果をラベル1に接続できた→OK、できない→NGを受け取って
既定では4回要求を送信しますが、そのうち一部だけ応答が返ってきた場合はOKなんでしょうか?

> いろいろインターネットで調べましたが、
> 思い通りに結果は出てなかったです。
どういうコードを書いた結果、思い通りにならなかったのでしょう?
・ping.exeを実行する
・ping.exeが結果を出力する先である標準出力を読み取る
・読み取った出力結果を解析する
・解析結果をcsvとしてファイルに出力する
という手順になると思われますが、どこが分かりませんでしたか?
引用返信 編集キー/
■66919 / inTopicNo.3)  Re[1]: cmd.exeでping結果をcsvに書き込む
□投稿者/ 魔界の仮面弁士 (242回)-(2013/06/05(Wed) 22:49:27)
No66917 (miti さん) に返信
> cmd.exeでIPアドレスを入力しpingで送信して

結果取得が必要なら、C# から直接 Pingクラスを呼び出した方が手っ取り早いと思います。
http://dobon.net/vb/dotnet/internet/ping.html

コマンドシェルから実行したいのであれば、cmd.exe ではなく PowerShell を用いて
WMI の Win32_PingStatus クラスを呼び出すという手もつかえます。

----
$computer = "www.google.com"
$rtn = get-wmiobject -class win32_pingstatus -filter "Address = '$computer'" 
If($rtn.StatusCode -ne 0) { "$computer に到達できません" } Else {"$computer から応答がありました"}
----


> 接続できたかどうかの結果をcvsファイルに書き込みしたいです。
cvs というと、バージョン管理ソフト(Concurrent Versions System)を連想しますが、
csv の間違いでしょうか? (Comma-Separated Values)

> のような形式で書き込みしたいです。(またはcmd.exeの結果を直接CVSファイルに書き込みもOK)
Ping.exe の終了コードで判定したいところですが、ERRORLEVEL からでは
正しく判定できないパターンがあるので、文字列解析になってしまいますね。

OS によって、Ping.exe が返す文字列は微妙に異なりますので、
他の OS に移植する際には気を付けてください。


> コードを教えてもらえますか?
それは「質問」では無く、「制作依頼」ですよね…?

たとえば、192.168.0.1〜192.168.0.254 の範囲の結果表を作りたいなら、
-------------------------------------
@ECHO OFF
FOR /L %%f IN (1,1,254) DO (
  PING -n 1 -w 50 192.168.0.%%f | FIND "バイト数 =32" > NUL
  IF ERRORLEVEL 1 ( 
    ECHO 192.168.0.%%f,NG
  ) ELSE (
    ECHO 192.168.0.%%f,OK
  )
)
-------------------------------------
というテキストを「test.cmd」というファイル名で作成しておき、
それを「cmd.exe test.cmd > result.csv」で実行すれば
-------------------------------------
192.168.0.1,NG
192.168.0.2,NG
192.168.0.3,NG
192.168.0.4,OK
192.168.0.5,OK
192.168.0.6,OK
192.168.0.7,OK
192.168.0.8,OK
192.168.0.9,OK
192.168.0.10,OK
192.168.0.11,OK
192.168.0.12,NG
192.168.0.13,OK
(中略)
192.168.0.254,NG
-------------------------------------
と書かれた result.csv が出来上がります。

引用返信 編集キー/
■66922 / inTopicNo.4)  Re[2]: cmd.exeでping結果をcsvに書き込む
□投稿者/ miti (3回)-(2013/06/06(Thu) 21:41:55)
今日はpingクラスで作成できました。苦戦でした…
ありがとうございます。

言い忘れたけど、C#はまだ超初級者なんです…(VBAやっているので、少しは…)

------------------------------------
192.168.0.12  成功しました
192.168.0.13  失敗しました
(中略)
192.168.0.254  成功しました
-------------------------------------
form1のtextbox1(label1でもOK)にn個の結果が書かれています。(出来たので)
課題は上記通りに(そのまま)csv(cvsではないです、すみません)ファイルにどのようなコードを使って書き込むところがわかりません…

http://dobon.net/vb/dotnet/file/writecsvfile.html

も書かれていますが、コードが難しすぎてわかりません…

手順としては
csvファイルを開く?→pnig結果を受け取った全配列に新規csvを書き込むだけかな…(保存先とか今は考えない)

手間かかってもいいので頑張りますので、ヒントやアドバイスをください
よろしくお願いします。
引用返信 編集キー/
■66923 / inTopicNo.5)  Re[3]: cmd.exeでping結果をcsvに書き込む
□投稿者/ Azulean (174回)-(2013/06/06(Thu) 22:18:55)
ファイルに書き込むまで一括してやらずに、まずは , 区切りの情報をテキストボックスに表示できるようになってみてください。
次に http://dobon.net/vb/dotnet/file/writefile.html あたりでファイルに書き込むというように二段階に分けるとよいでしょう。


「見てもわかりません」では丸投げです。
どういったことがわかって、どういったことがわからないのかを明らかにして質問するようにしましょう。
また、一つのサイトが難しい内容であれば、別のサイトはどうかと探してみたり、取り組んでいる課題はどういった事柄の組み合わせか問題の切り分けをしてみたりすることにもトライしてみましょう。(難しいかもしれませんが)
引用返信 編集キー/
■66948 / inTopicNo.6)  Re[4]: cmd.exeでping結果をcsvに書き込む
□投稿者/ miti (4回)-(2013/06/10(Mon) 20:35:22)
No66923 (Azulean さん) に返信
> ファイルに書き込むまで一括してやらずに、まずは , 区切りの情報をテキストボックスに表示できるようになってみてください。
> 次に http://dobon.net/vb/dotnet/file/writefile.html あたりでファイルに書き込むというように二段階に分けるとよいでしょう。
>
サイトを見つけていただき、ありがとうございます。
(いろいろサイトを探したが見つからなかったので…)
理想の近いサンプルコードでしたので解決できました。

別件ですが、
このサイトに出来上がったコード記述方法がきちんと整理(記述が無駄なくみんなが見てわかりやすいとか)しているかどうかも質問してもいいのですか?
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -