動かないです。すみませんが ご教示願います。なお、すいませんが、今回は私の通常の
ポイントで支払わせてください。よろしくお願いします。
@echo off
set outdir=c:\test
if not exist %outdir%\\netstat-daily.txt ( echo time,received,
sent > %outdir%\\netstat-daily.txt )
netstat -e | find "Bytes" > %outdir%\\netstat-temp.txt
for /F "eol=; tokens=2,3 " %%i
in (%outdir%\\netstat-temp.txt)
do @echo %time:~0,2:%time:
~3,2%:%time:~6,2%,=%%i/1024/
1024,=%%j/1024/1024 >> %outdir
%\\netstat-daily.txt
set outdir=
rem exit
まず、%time:~0,2の後ろに%がないので変な表示になっているようです。
該当の書籍を見ていないので、どういう結果になるのがいいのか示してもらえれば、もう少しお役にたてるかもしれません。
%time:~0,2:%time:~3,2%:%time:~6,2%
~0,2の後ろに%が抜けてます
その際 @echo off という行は削除して、出ているエラーメッセージ(というか画面全部)を貼り付けるといいかもです。
if not exist %outdir% md %outdir%
とかしてもいいですが。
set outdir=c:\test
if not exist %outdir% md %outdir% \\netstat-daily.txt ( echo time,received,sent > %outdir%\\netstat-daily.txt )
netstat -e | find "Bytes" > %outdir%\\netstat-temp.txt
for /F "eol=; tokens=2,3 " %%i
in (%outdir%\\netstat-temp.txt)
do @echo %time:~0,2%:%time:
~3,2%:%time:~6,2%,=%%i/1024/
1024,=%%j/1024/1024 >> %outdir
%\\netstat-daily.txt
set outdir=
rem exit
下記エラー内容
>set outdir=c:\test
>if not exist c:\test md c:\test \\netstat-daily.txt ( echo time,received,sent ) 1>c:\test\\netstat-daily.txt
>netstat -e | find "Bytes" 1>c:\test\\netstat-temp.txt
プロセスはファイルにアクセスできません。別のプロセスが使用中です。
コマンドの構文が誤っています。
次に、コマンドプロンプト上で「netstat -e」だけを入力して、エラーがないかを確認してみましょう。
「netstat -e」の結果に下の行みたいな結果は出ていますか?
Received Sent
Bytes 199029266 102533172
次にコマンドプロンプト上で、「netstat -e | find "Bytes" >c:\test\netstat-temp.txt」を入力して
結果を確認してみてください。
C:\>netstat -e | find "Bytes" 1>c:\test\\netstat-temp.txt
netstat -e を実行すると下記で正常にでます。
C:\>netstat -e
Interface Statistics
Received Sent
Bytes 29726973 11490300
Unicast packets 123976 121206
Non-unicast packets 25547 69
Discards 0 0
Errors 0 0
Unknown protocols 6002
netstat -e | find "Bytes" >c:\test\netstat-temp.txt
上記を実行すると、テキストファイルには下記があります。netstat -eの実行結果がすべて残ればいいのですが、
Bytes 29761529 11494181
------
rem ★出力先を設定
set outdir=c:\test
rem ★「netstat-daily.txt」がなければヘッダ(time,received,sent)を付けてファイルを作成
if not exist %outdir%\\netstat-daily.txt ( echo time,received,sent > %outdir%\\netstat-daily.txt )
rem ★netstatコマンドで送受信バイト数を得て、「netstat-temp.txt」に一時的に書く
netstat -e | find "Bytes" > %outdir%\\netstat-temp.txt
rem ★2列目(受信バイト)と3列目(送信バイト)を抜き出し、現在時刻を付けて「netstat-daily.txt」に追加する
for /F "eol=; tokens=2,3 " %%i in (%outdir%\\netstat-temp.txt) do @echo %time:~0,2%:%time: ~3,2%:%time:~6,2%,=%%i/1024/1024,=%%j/1024/1024 >> %outdir%\\netstat-daily.txt
------
だとすると、netstat-temp.txtは一時的なものなので1行だけでいいのかなと思います。
> netstat -eの実行結果がすべて残ればいいのですが、
これを行いたければ、
-----
netstat -e > %outdir%\\netstat-temp.txt
-----
と、| find "Bytes"を外してあげればいいと思いますが、その後の動作に支障が出そうです。
あくまでも、結果をためておくのはnetstat-daily.txtなんだと思います。
set outdir=c:\test
if not exist %outdir%\\netstat-daily.txt ( echo time,received,sent > %outdir%\\netstat-daily.txt )
netstat -e | find "Bytes" > %outdir%\\netstat-temp.txt
for /F "eol=; tokens=2,3 " %%i in (%outdir%\\netstat-temp.txt) do @echo %time:~0,2%:%time: ~3,2%:%time:~6,2%,=%%i/1024/1024,=%%j/1024/1024 >> %outdir%\\netstat-daily.txt
set outdir=
rem exit
すると、DOSプロンプトは下記になります。
c:\>set outdir=c:\test
c:\>if not exist c:\test\\netstat-daily.txt (echo time,received,sent 1>c:\test\\netstat-daily.txt )
c:\>netstat -e | find "Bytes" 1>c:\test\\netstat-temp.txt
そこでできたファイルの中身は下記です。
netstat-daily.txtの中身は
time,received,sent
netstat-temp.txtの中身は
c:\>netstat -e | find "Bytes" 1>c:\test\\netstat-temp.txt
となります。
> netstat -e | find "Bytes" >c:\test\netstat-temp.txt
> 上記を実行すると、テキストファイルには下記があります。netstat -eの実行結果がすべて残ればいいのですが、
> Bytes 29761529 11494181
これも、出なくなってしまいましたか?
もしそうなら、単独でコマンドプロンプト上で、
netstat -e | find "Bytes"
を行ったら、どんな結果になるか知りたいです。
(Bytes 29761529 11494181のような結果が画面上に出ますでしょうか?)
その次に、
netstat -e | find "Bytes" > c:\test\netstat-temp.txt
を行って、
> Bytes 29761529 11494181
のような結果がファイルに書かれているか確認してみてください。
> netstat -e | find "Bytes" >c:\test\netstat-temp.txt
> 上記を実行すると、テキストファイルには下記があります。netstat -eの実行結果がすべて残ればいいのですが、
> Bytes 29761529 11494181
>これも、出なくなってしまいましたか?
上記をもう一度試しましたが、出ます。よろしくお願いします。
では、最初から「★2列目(受信バイト)と3列目(送信バイト)を抜き出し、現在時刻を付けて「netstat-daily.txt」に追加する」の個所までを実行するとどうなりますでしょうか?
まず、バッチファイルに
-----
for /F "eol=; tokens=2,3 " %%i in (%outdir%\\netstat-temp.txt) do @echo %time:~0,2%:%time: ~3,2%:%time:~6,2%,=%%i/1024/1024,=%%j/1024/1024 >> %outdir%\\netstat-daily.txt
-----
を1行で書き、できればその後ろに
-----
pause
-----
を書き込んでおいて、エラーが出ないか確認できるとよいでしょう。
(ちゃんと動くようになったらpauseは外してかまいません)
こちらの環境(Windows XP)では、実行後にnetstat-daily.txtに
-----
14:01:13,=224472207/1024/1024,=111626806/1024/1024
-----
のような内容が書かれています。
rem
set outdir=c:\test
rem
if not exist %outdir%\\netstat-daily.txt ( echo time,received,sent > %outdir%\\netstat-daily.txt )
rem
netstat -e | find "Bytes" > %outdir%\\netstat-temp.txt
for /F "eol=; tokens=2,3 " %%i in (%outdir%\\netstat-temp.txt) do @echo %time:~0,2%:%time: ~3,2%:%time:~6,2%,=%%i/1024/1024,=%%j/1024/1024 >> %outdir%\\netstat-daily.txt
pause
すると下記エラーになります。
C:\>rem
C:\>set outdir=c:\test
C:\>rem
C:\>if not exist c:\test\\netstat-daily.txt (echo time,received,sent 1>c:\test\\netstat-daily.txt )
C:\>rem
C:\>netstat -e | find "Bytes" 1>c:\test\\netstat-temp.txt
プロセスはファイルにアクセスできません。別のプロセスが使用中です。
C:\>for /F "eol=; tokens=2,3 "
%i in (c:\test\\netstat-temp.txt) do @echo 14:14:23:02.83outdir\\netstat-daily.
txt
14:14:23:02.83outdir\\netstat-daily.txt
C:\>pause
続行するには何かキーを押してください . . .
netstat-daily.txtの中身は
time,received,sent
netstat-temp.txtの中身は
C:\>netstat -e | find "Bytes" 1>c:\test\\netstat-temp.txt
となっています。すいません、よろしくお願いします。
ファイル名をバッチの実行コマンドと同じにしてたのを変更したら、とりあえずうごきました。
netstat-temp.txtにErrorの結果がでるのは いいのですが、これをファイル名に
タイムスタンプをつけたいです。わたしも しらべますが、ご存知でしたらご教示いただければ
と思います。
コマンドプロンプト上では実行できているけど、バッチファイルになるとうまくいかないみたいですので、バッチファイルの中身を確認してみましょうか。
・全角スペースとか全角の記号とか使っていないか
・1行で書くべきところはちゃんと1行になっているか
・バッチファイル実行中は、netstat-daily.txt、netstat-temp.txtは他のプログラムで開いていないか
・バッチファイル名はnetstat-daily.txt、netstat-temp.txt以外になっているか
・c:\testは作成済みで存在するか
・PCを再起動した後でバッチファイルを実行しても「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」が出てしまうか
あと、OSのバージョンは何でしょうか?
rem
set outdir=c:\test
rem
if not exist %outdir%\\netstat-daily.txt ( echo time,received,sent > %outdir%\\netstat-daily.txt )
rem
netstat -e | find "Errors" > %outdir%\\netstat-temp.txt
for /F "eol=; tokens=2,3 " %%i in (%outdir%\\netstat-temp.txt) do @echo %time:~0,2%:%time:~3,2%:%time:~6,2%,=%%i/1024/1024,=%%j/1024/1024 >> %outdir%\\netstat-daily.txt
set outdir=
rem exit
あと、netstat-temp.txtのファイル名にタイムスタンプをつけたいのですが、ご教示いただけ
ないでしょうか。
OSはWindowsXPのServicePack3です。
(OSは、こちらの環境と全く違っていたら・・と思って聞きました。)
> netstat-temp.txtのファイル名にタイムスタンプをつけたいのですが
netstat-temp1630.txtのようにしたいなら、こんな感じでしょうか。
rem 実行時間を取得
for /F "tokens=1-2 delims=: " %%a in ('time /t') do set SYORI_TIME=%%a%%b
rem
set outdir=c:\test
rem
if not exist %outdir%\\netstat-daily.txt ( echo time,received,sent > %outdir%\\netstat-daily.txt )
rem netstat-temp+実行時間でファイル名作成
netstat -e | find "Errors" > %outdir%\\netstat-temp%SYORI_TIME%.txt
rem netstat-temp+実行時間のファイルを読み込む
for /F "eol=; tokens=2,3 " %%i in (%outdir%\\netstat-temp%SYORI_TIME%.txt) do @echo %time:~0,2%:%time:~3,2%:%time:~6,2%,=%%i/1024/1024,=%%j/1024/1024 >> %outdir%\\netstat-daily.txt
set outdir=
rem exit
m(_ _)m
今回は日付+時刻でnetstat-temp200906081700.txtのような形で出力します。
rem 実行時間・実行日付を取得
for /F "tokens=1-2 delims=: " %%a in ('time /t') do set SYORI_TIME=%%a%%b
for /F "tokens=1-3 delims=/ " %%c in ('date /t') do set SYORI_DATE=%%c%%d%%e
rem
set outdir=c:\test
rem
if not exist %outdir%\\netstat-daily.txt ( echo time,received,sent > %outdir%\\netstat-daily.txt )
rem netstat-temp+タイムスタンプでファイル名作成
netstat -e | find "Errors" > %outdir%\\netstat-temp%SYORI_DATE%%SYORI_TIME%.txt
rem netstat-temp+タイムスタンプのファイルを読み込む
for /F "eol=; tokens=2,3 " %%i in (%outdir%\\netstat-temp%SYORI_DATE%%SYORI_TIME%.txt) do @echo %time:~0,2%:%time:~3,2%:%time:~6,2%,=%%i/1024/1024,=%%j/1024/1024 >> %outdir%\\netstat-daily.txt
set outdir=
rem exit
今回は自分も勉強になりました。
ありがとうございました。