• ベストアンサー

HDD容量確認バッチを作りたいです。

管理しているPCのハードディスクの空き容量(PCによって違いますが、C/DかC/D/E)の空き容量を確認して毎日テキストに出力したいです。 実行OSはXP/2003server/2000serverです。 ソフトを追加できないので、なんとかバッチで処理したいのですが、、、 1台のPCでバッチを走らせるとネットワークの指定したPCの容量も確認って事はできないですよね? 調べたところ、「set size=dir C:\ | find "バイトの空き領域"」で空き容量をだせるみたいなのですが、バイト表示をGB表示で出したいのですが可能でしょうか? 詳しい人・・・教えてください><

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.3

> yyyymm = Year(today) & Left("0" & Month(today),2)  大変よくできまし・・・・ん? これだと11月が「"0" & "11"→"011"の左側2文字を取る→"01"」になるのでRightを使おう。 yyyymm = Year(today) & Right("0" & Month(today), 2) yyyymmdd = yyyymm & Right("0" & Day(today), 2) よく頑張りました。 > 空き容量取得の時に少数点以下2桁(3桁目は四捨五入しない)で表示+ > 空き容量がMBの時はGB表示ではなくMB表示で表示すると言うことは可能でしょうか。 > (各サーバを見ましたら空き容量がMBのもありまして^^;)  MB表示の方は1024で割って1024で割って・・・・という所を、割っては確認、割っては確認とするように変更しましょう。Ifを使えば良いね。とりあえず最も分かりやすく最も泥臭い処理で書いてみるので、より効率の良い手段はないか是非考えてみてくれたまい。抜粋です。 Dim fspace, surfix fspace = drv.FreeSpace surfix = "B" If fspace > 1024 Then ' 空きが1024バイト以上 fspace = fspace / 1024 surfix = "KiB" End If If fspace > 1024 Then ' 空きが1024×1024バイト以上 fspace = fspace / 1024 surfix = "MiB" End If If fspace > 1024 Then ' 空きが1024×1024×1024バイト以上 fspace = fspace / 1024 sufix = "GiB" End If fspace = Fix(fspace * 100) / 100 ' 小数点第二位を取るため100倍して切り捨てて100で割る  これで出てきたfspace & surfixが"60.58GiB"などのようになる。四捨五入じゃないという事なので切り捨てを行っております。ところでこれだと小数点第二位が0の時、"60.5GiB"と小数点以下が一桁表示になってしまうので、"60.50GiB"と表示したければもう一工夫必要だ。  また、これを空きと総容量の両方で個別に行うと「985.5MiBの空き/19.98GiB中」などと単位がずれる。個人的な意見ではあるがこの2つは単位をそろえる方が空き容量の割合が見やすいと私は思う。それか、パーセント表示(5.25%Free)を横につけるとかね(割り算でできるよね)。これも工夫していただきたい。機能を付け足していけるのもスクリプトの醍醐味だし、より良い方法はないか、不便はないかもっと便利にならないかと考える訓練はいつかきっと助けになる事でしょう。  ちなみに今回単位がKiB、MiB、GiBとなっているが、これは二進接頭辞と言って一応ちゃんとした国際規格で、厳密に1KiB=1024B、1MiB=1024KiBと認識されるものだ。

sti_test
質問者

お礼

長々と教えてくださりありがとうございました^^

sti_test
質問者

補足

anmochiさん >大変よくできまし・・・・ん? これだと11月が「"0" & "11"→"011"の左側2文字を取る→"01"」になるのでRightを使おう。 あぅ・・・今の事(今月が正しく表示できた)だけしか思いつきませんでした^^; 教えて頂いたのを参考に作ったら今のところ希望した動作になりました^^ エラー処理の追加して実用できるものにしたいと思います。 長々とありがとうございました^^ またわからない事が出れば(がんばります^^;)書き込みしますので、お時間があれば教えてください^^

その他の回答 (2)

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

> 欲を言えば・・・C\:drvlog\YYYYDD\PC名_YYYYMMDD.txtではかせたいです^^; むぅ・・・・。YYYYDDはYYYYMMの間違いと仮定する。 ----ここから ' 変数定義 Dim fso, net, drv, ts, s, fname, yyyymmdd, yyyymm, today ' 初期処理 Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set net = WScript.CreateObject("WScript.Network") ' 日付を取得 today = Now() yyyymm = Year(today) & Month(today) yyyymmdd = yyyymm & Day(today) ' フォルダの存在を確認し無ければ自動で作る fname = "C:\drvlog" If Not fso.FolderExists(fname) Then fso.CreateFolder(fname) End If fname = fname & "\" & yyyymm If Not fso.FolderExists(fname) Then fso.CreateFolder(fname) End If ' ログファイルを作る fname = fname & "\" & net.ComputerName & "_" & yyyymmdd & ".txt" Set ts = fso.CreateTextFile(fname) ' レディなドライブの容量をテキストに書く For Each drv In fso.Drives If drv.IsReady Then s = drv.DriveLetter & " - " s = s & drv.VolumeName s = s & Fix(drv.FreeSpace / 1024 / 1024 / 1024) & "GBの空き" s = s & " / " & Fix(drv.TotalSize / 1024 / 1024 / 1024) & "GB中" Call ts.WriteLine(s) End If Next ts.Close ----ここまで  例によって検証はお願いする。これで、フォルダが無ければ自動で作成してログファイルもはくようになった。月が変わっても大丈夫だ。  が! くっくっく。実行してみると分かるが、月や日が1桁の時に、例えば7月を07としてくれない。2008年7月15日が2008715となってしまうのだ。この部分は宿題として残しておこう。それがなぜで、ではどうすれば良いのか。是非ともチャレンジしていただきたい。また、これは思いつくままに書いただけなので決して良いスクリプトとは言えない。エラー処理も一切無い。是非改良して手になじむツールにして欲しい。  決して意地悪で言っているのではなく、アドミン族に必要なのはこの辺をちゃちゃっとなんとかして管理を楽にする能力なのだ。  「日付を取得」のエリアを・・・・ごにょごにょ。

sti_test
質問者

補足

anmochiさん >むぅ・・・・。YYYYDDはYYYYMMの間違いと仮定する。 間違えてました^^; >この部分は宿題として残しておこう。 yyyymm = Year(today) & Left("0" & Month(today),2) で希望の動作になりました。 すみません。また質問です^^; 空き容量取得の時に少数点以下2桁(3桁目は四捨五入しない)で表示+ 空き容量がMBの時はGB表示ではなくMB表示で表示すると言うことは可能でしょうか。 (各サーバを見ましたら空き容量がMBのもありまして^^;) もしお時間があれば教えてください^^; 頑張って中身の理解を今してます^^;

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

その3つのOS限定で良いなら、WSHを使うと良いでしょう。 ----ここから Dim fso, drv, ts, s Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.CreateTextFile("C:\drvlog.log") For Each drv In fso.Drives If drv.IsReady Then s = drv.DriveLetter & " - " s = s & drv.VolumeName s = s & Fix(drv.FreeSpace / 1024 / 1024 / 1024) & "GBの空き" s = s & " / " & Fix(drv.TotalSize / 1024 / 1024 / 1024) & "GB中" Call ts.WriteLine(s) End If Next ts.Close ----ここまで 以上のコードをテキストエディタにコピペして、c:\chkfree.vbsなど、拡張子をvbsにして保存。後はコマンドプロンプトで C:\>cscript.exe chkfree.vbs でテキストファイルができあがる。コードの意味はゆっくり読み解けば良いでしょう。WindowsPowerShellも良いけど、Windows Scripting Hostだとその3つのOSにはほぼ入っているのでこっちの方が楽じゃないかな。今ささっと書いてみただけなので動かないかも・・・・。検証してくだされ。 > 1台のPCでバッチを走らせるとネットワークの指定したPCの容量も確認って事はできないですよね? RPCやTelnetなんかを駆使すればできるかも知れないけど・・・・。何のソフトも無しではすぐには思いつかないな。

sti_test
質問者

補足

anmochiさん ありがとうございます。 自宅のXP Proにて「C:\>cscript.exe chkfree.vbs」実行しましたらうまく動きました^^ 明日serverでも確認をしてみます。 VBSはまったく知らないので教えて君で申し訳ないですが、ファイル名をPC名_YYYYMMDD.txtで吐き出せますでしょうか。 欲を言えば・・・C\:drvlog\YYYYDD\PC名_YYYYMMDD.txtではかせたいです^^; もし知ってましたら参考URLでもかまいませんのでお教えくださいませ><

関連するQ&A

  • バッチ処理でテキストから数値を取り出し、CSVにしたい

    こんにちは。 似非SEです。 2度目の質問です。 現在、あるサーバのディスク容量の増減を管理するため、 以下のバッチをスケジューリングして、容量をファイルに 書き込んでいます。 -------------------------------------------------------- echo D:\ >> DS_D.txt date /t >> DS_D.txt time /t >> DS_D.txt dir D:\ | find "バイトの空き領域" >> DS_D.txt -------------------------------------------------------- 出力されるファイルは次のようになります。 -------------------------------------------------------- D:\ 2008/05/22 09:29 3 個のディレクトリ 39,870,087,168 バイトの空き領域 D:\ 2008/05/23 09:45 3 個のディレクトリ 39,870,087,168 バイトの空き領域 -------------------------------------------------------- 非常に簡単に容量がわかるのですが、これをグラフにするのに 手間がかかってしまっています。 <要望> 1.出力テキストから日付を取得 2.出力テキストから空き容量の数値を取得 3.csvファイルに落とす 出力ファイルは 2008/05/22[TAB]39,870,087,168[リターン] 2008/05/23[TAB]39,870,087,168[リターン] のようにできればベストです。 なにとぞ似非SEを助けて下さいませ!

  • ハードディスク、CD等メディアの空き容量の見方

    WIN XPを使っています。 ハードディスクや、PCに接続した、メディアの空き容量をみたいのです。 見方の違いで、空き容量が違って表示される気がするのですが、、、 マイコンピュータのハードディスク容量に表示される容量と、プロパティに表示される容量と違うのは、なぜですか? プロパティに表示される、バイトと表示される量とGBで表示される量とかなり違うのはなぜですか? CDドライブで、使用領域が11MBと表示されているのに、空き領域が0MBと表示されます。どうみても、もっと空いているのに、どうしてですか? それとも、正しく空き領域を表示させる方法が他にあるのでしょうか? 初心者の質問ですみません。どなたか詳しい方、お願いします。

  • Win2000 バッチファイルについて

    こんにちは、 Win2000の環境で下記のバッチがうまく動作できません、”FIND:パラメータ書式が間違います”というエラーが出ています、ほかの2003,2008ではそういう現象が出ていません。 なぜでしょうか? そこの”^|”の”^”を消したとしても無理のようです。 ■簡単にバッチファイルが存在する領域の使用容量を算出するバッチファイルです。(一時ファイルの生成は利用しない、Findコマンドだけを使うという前提で) ソース: @echo off for /F "tokens=3" %%s in ('dir /s/-c ^| find "個のファイル"') do Set s=%%s echo %s% 分かって頂ければご教授ください。 誠にありがとうございます~~。

  • サーバー Cドライブの容量について

    お世話になっております。 下記事象について、教えて頂けますと幸いです。 <サーバーのCドライブ容量について(自社内)> ■環境 Windows Server 2008 R2 Standard RAM : 4GB システム : 64ビットオペレーティングシステム ※英語環境 ■ハードディスクドライブ C: 30.00 GB NTFS D: 30.00 GB NTFS E: 60.00 GB NTFS ■構成 ・データは全てEドライブで使用しています。 ・Cドライブには、Windows、Users、Program Files、inetpubなど  最小限で使用するよう努めています。 ・サーバーには特定の管理者のみログイン出来ます。 ■事象(Cドライブの容量について) ・3日ほど前までは、Cドライブの空き容量が、3.86GBでした。  昨日空き領域を確認したところ、9.94GBに増えておりました。 ・社内の他の管理者は、ログインすらしておりません。 ・本社が海外にあるため、本社の管理者に聞くべきところかもしれませんが、  如何せんレスポンスが悪いため、自力で確認出来るところまでは進めたいと  考えております。 ・容量確認のため、毎日 dir /s コマンドでCドライブ全体の  ログを取っております。 ・ログでの容量確認の結果は次の通りです。  (空き領域が 3.86GB だった日のログ)     Total Files Listed:       98876 File(s) 18.362.330.923 bytes       72031 Dir(s) 4.139.737.088 bytes free     ※ Cドライブが全部で30GBに対し、このログのトータルでは      約20GBです。  (空き領域が 9.94GB だった日のログ)     Total Files Listed:       111380 File(s) 21.047.019.307 bytes       81721 Dir(s) 10.759.745.536 bytes free     ※ ログでのトータルが、29GBほどであり辻褄は合うかと思います。 ・上記2日分のログにおいて、次の点が不明です。  1) 空き領域3.86GBの時点で、Cドライブのトータルに足りていない理由。  2) 空き領域3.86GB⇒9.94GBの過程で、使用領域が増・空き領域が増、   ということはあり得るのか。 単にファイルの増減だけではなく、他の要因がございましたら、 教えて頂けますと幸いです。 (XPの復元ポイント、など…)、

  • ドライブCとDの容量について、またはEドライブについて

    宜しくお願い致します。最近PCの動作が遅いのが気になりこちらの サイトのQ&Aを参考にし乍ら、先ずは以下○のことをしました。 ○Cドライブにあるデータ ・マイドキュメントをCドライブからDに移動 ・使わないフォルダやソフトは片っ端から削除やアンインストール ○インターネット一時ファイルの変更  インターネット一時ファイルを自動でクリアする ○ハードディスクのクリーンアップ   ○デフラグで最適化 ◇最適化の結果です。  ボリューム (C:) 使用領域 = 10.47 GB 空き領域 = 3.50 GB 空き領域の割合 = 25 %     ボリューム (D:) 使用領域 = 2.49 GB 空き領域 = 35.85 GB 空き領域の割合 = 93 % ◇使用PCは: SONY vaio GRT55/B 使用OS: WindowsXP CPU:  2.40GHZ ハードディスク:60GB  メモリ: 256MB   回線:光 今のPCの状態はといいますと、動作に変わりありません。 Cドライブの容量の割り合いが皆さんより少ないように思います。 ◆ご質問です。 1)ドライブCに容量が少ないとさくさく動かないのでしょうか? 2)ドライブCとDのみの場合 割り当てる容量はどれくらいが   望ましいのでしょうか? 3)また、私はゲームをよくするのですが、CとDだけではなく   C:OS及びCにしかインストールできないソフトウェア   D:ソフトウェアのインストール先   E: データ保存領域(動画・画像)  のように振り分け、ドライブDを新たに作った方が動作的に良いので しょうか? そうでしたら、Dの新たな作り方、どんな感じで容量を 割り当てれば良いのかも併せてお教頂けますでしょうか。 当方PC初心者です。ご存知のお方がいらっしゃいましたら お手隙な時でもご教授頂けましたら幸いです。

  • HDDの空き容量について

    こんにちは! 今まであまり気にしてなかったHDDの空き容量についてお尋ねしたいのですが こちらの過去ログなどを参考にマイコンピューターの ハードディスクから空き容量と使用容量を見ることができました。 それで空き容量と使用容量を確認したところ Cの方は容量が30.0GB、(使用容量15.3空き容量14.7) Dの方は容量249GB(使用容量99.9MB空き容量249GB)となってたんですが これって結局はどれぐらい容量があるんでしょう? というのも新しく無料のお絵描きソフトをDLしようと思ったのですが そこの説明に推奨空き容量80MB以上とあったので今のHDDの状況で 大丈夫なのかと不安になってます。 GBとかMBとかいまいちどれぐらいのことなのかよくわかってなくて。 もしよければ簡単に説明してください。 それと調べる時、DドライブとCドライブに分かれてたのですが これはDドライブの方に大切な記録を残すために分かれてるんですよね? (万が一ウイルスなどでCドライブのデータが消えた時など) どうやら私はほとんどDドライブを使ってなくてCドライブばかりに いろいろ保存してたようです; やはりこれからは画像やソフトなどはDドライブに保存したほうがいいでしょうか?

  • HDDの容量について

    デルのデスクトップPCです。 今まで気づかなかったのですが、 HDD160G のはずなんですが、 Cドライブ 使用領域  11.5 空き領域  8.4    容量  20.0 Dドライブ 使用領域 11.3 空き領域 117 容量   128 とあるのですが、全体の容量はあわせると 148Gしかないのですが・・おかしいでしょうか? 買った時に、160にしたのなら、ぴったり160あるものですかね?^ 最初は160だったのが、なんかで減ったりとかってありますでしょうか?  

  • HDD容量がかたよっています

    HDD容量がかたよっています 初心者なので解りやすく 説明頂ければ助かります カテゴリー違っていたら すみません windows xpを使っています マイコンピューターの  ローカルディスク(C) 空き領域98.8MB 合計30GB ローカルディスク(D) 空き領域183GB 合計245GB です 「容量が少ない」「容量が足りません」とたびたび表示され CD 写真 などを保存出来ません ローカルディスク(D)が多く空いている為 (C)から(D)に保存内容を移動させるとか (D)の容量を(C)に移すとか 出来ないでしょうか? 初心者なので丁寧に説明 頂ければ助かります 宜しくお願いします

  • dirコマンドのバッチ出力結果について

    PC内のフォルダのファイル数を管理するバッチを作成しているのですが 表示結果がイマイチで改善したいのですがご教示いただけないでしょうか。 現在はこのようなバッチ内容です set sv=1 echo test1 test2 test3 dir \\abc%sv%\e$\DATA\test1 /b | find "-" /c dir \\abc%sv%\e$\DATA\test2 /b | find "-" /c dir \\abc%sv%\e$\DATA\test3 /b | find "-" /c 実行結果は以下です --------------------------- test1 test2 test3 0 0 0 ---------------------------- この結果を次のように横に表示したいです。 ------------------------ test1 test2 test3 0 0 0 ------------------------

  • バッチファイルで一つのファイルをdirで比較し分岐

    バッチファイルでフォルダにある全てのファイルに対し ファイルごとにdir /T:Cとdir /T:Wで比較し 同じならば削除 異なれば何もしない 処理をしたく質問させて頂きました 次のような結果の場合日時が同じなのでファイルを削除する C:\>dir D:\AAA\001.jpg /T:C ドライブ D のボリューム ラベルは microSD です ボリューム シリアル番号は E484-83B8 です D:\AAA のディレクトリ 2012/11/28 12:59 1,284 001.jpg 1 個のファイル 1,284 バイト 0 個のディレクトリ 24,690,798,592 バイトの空き領域 C:\>dir D:\AAA\001.jpg /T:W ドライブ D のボリューム ラベルは microSD です ボリューム シリアル番号は E484-83B8 です D:\AAA のディレクトリ 2012/11/28 12:59 1,284 001.jpg 1 個のファイル 1,284 バイト 0 個のディレクトリ 24,690,798,592 バイトの空き領域 日時が異なるので何もしない C:\>dir D:\AAA\002.jpg /T:C ドライブ D のボリューム ラベルは microSD です ボリューム シリアル番号は E484-83B8 です D:\AAA のディレクトリ 2012/11/07 03:12 1,443,326 002.jpg 1 個のファイル 1,443,326 バイト 0 個のディレクトリ 24,690,798,592 バイトの空き領域 C:\>dir D:\AAA\002.jpg /T:W ドライブ D のボリューム ラベルは microSD です ボリューム シリアル番号は E484-83B8 です D:\AAA のディレクトリ 2012/11/04 17:53 1,443,326 002.jpg 1 個のファイル 1,443,326 バイト 0 個のディレクトリ 24,690,798,592 バイトの空き領域 またもっと簡単にdir D:\AAA /T:Cとdir D:\AAA /T:Wの結果で 分岐処理は可能でしょうか よろしくお願いします