HDDの空き容量を知るNo.03091
onga さん 02/04/01 21:23
 
はじめまして。 onga と申します。
早速ですが, 秀丸マクロで ハードディスクの空き容量(未使用スペースのバイト数)
を知る方法を教えてください。

このたび Windows XP に変更したら, 今まで動いていたマクロが動かなくなってあせ
っています。

従来(Win98) では  
   dir c:\ > c:\temp\dir.txt
とやって, このファイル(dir.txt)の最終行の
   "****** バイトの空きがあります"
と表示される結果を拾っていましたが, xp になったら このメッセージが
   "****** バイトが使用可能です."
と変わってしまい, ディスクの全容量が表示されるようになってしまいました。

[ ]
RE:03091 HDDの空き容量を知るNo.03092
encodingshiftjis さん 02/04/02 00:37
 
何か詳細表示オプションなどを探しては
http://www.atmarkit.co.jp/fwin2k/xp_feature/013commandtool/commandtool3.html
を眺めても、

fsutil volume diskfree ボリュームの空き領域サイズの照会
がすぐ見つかります。

WSH のヘルプのサンプル・ソースにもあります。
// freeSpace.js
//次のコードは、Drive オブジェクトを使ってドライブのプロパティにアクセスする
例です。
//[JScript]
function ShowFreeSpace(drvPath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + drvPath + " - " ;
   s += d.VolumeName + "<br>";
   s += "使用可能な領域 : " + d.FreeSpace/1024 + " KB";
   return(s);
}

WScript.Echo(ShowFreeSpace("C:"));
------------------------------------
run "cscript freeSpace.js > temp.txt";
(未テスト)付近

[ ]
RE:03092 HDDの空き容量を知るNo.03098
onga さん 02/04/03 09:50
 
すみません。 素人には これだけの情報では解決できません。
秀丸マクロでは どう記述すればいいのでしょうか。



[ ]
RE:03091 HDDの空き容量を知るNo.03099
ENCODINGSHIFTJIS さん 02/04/03 12:14
 
>   "****** バイトが使用可能です."
>と変わってしまい, ディスクの全容量が表示されるようになってしまいました。
使っている command.com ?? が超古(2000年非対応)では「化粧惑星」
                  16 個のファイルがあります            
          3870720 バイトが使用可能です
とか 数値が カンマ区切りになってないとか? 他のXP と比較してどうでしょう。

[ ]
RE:03099 HDDの空き容量を知るNo.03103
onga さん 02/04/03 23:17
 
>>   "****** バイトが使用可能です."
>>と変わってしまい, ディスクの全容量が表示されるようになってしまいました。
>使っている command.com ?? が超古(2000年非対応)では「化粧惑星」
>                  16 個のファイルがあります            
>          3870720 バイトが使用可能です
>とか 数値が カンマ区切りになってないとか? 他のXP と比較してどうでしょう。


書かれていることが イマイチ理解できませんが, dos コマンドに
対するレスポンスは os によって違うんですね。
dir コマンドにたいして, Win 98 の場合は ディスクの空き領域の
大きさを返すのに, Win xp では 全ディスク容量を返します。
Win 95 ではまた違っているようです。
会社で 2000 を使ってますが (まだちゃんと確認できてませんが,
xp と似たような状況にあるように思います。

数値にコンマが ある/ない は, 後処理の問題なので
あまり問題はありません。
 


[ ]
RE:03098 HDDの空き容量を知るNo.03104
きいろいまふらあ さん 02/04/04 02:21
 
横からごめんなさい。最近XP使いになったものです。

>すみません。 素人には これだけの情報では解決できません。
>秀丸マクロでは どう記述すればいいのでしょうか。

まず試しに、コマンドプロンプトを(手動で)開いて
「fsutil volume diskfree c:」などとしてみましょう。
私のマシンでは

|C:\>fsutil volume diskfree c:
|空きバイト総数               : 4512780288
|バイト総数                   : 10026582016
|利用可能な空きバイト総数     : 4512780288

などとなります。
ということで「fsutil volume diskfree c: > dir.txt」などとしてあげればよ
いでしょう。マクロは出力結果のレイアウトが「dir c:\ > dir.txt」と異なる
ので多少の改修が必要かと思いますが。

上記コマンドの詳細についてはコマンドラインで「fsutil」「fsutil volume」
「fsutil volume diskfree」と打ってやればそれぞれ usage が出るはず。

ところで、私の環境では

|C:\>dir c:
| ドライブ C のボリューム ラベルがありません。
| ボリューム シリアル番号は 54A5-8EF0 です

| C:\ のディレクトリ

|2001/12/17  14:05                 0 AUTOEXEC.BAT
|2002/03/28  23:55    <DIR>          bin
|2001/12/17  14:05                 0 CONFIG.SYS
|2002/03/16  21:07    <DIR>          Documents and Settings
|2002/04/01  22:45    <DIR>          Downloads
|2001/12/17  22:46    <DIR>          Drivers
|2001/12/17  15:52    <DIR>          My Music
|2002/03/19  01:29    <DIR>          Program Files
|2002/04/01  02:04    <DIR>          WINDOWS
|               2 個のファイル                   0 バイト
|               7 個のディレクトリ   4,512,780,288 バイトの空き領域

などと、dirでも同じ空き領域のバイト数が表示されます。
ongaさんのところとは何かが違うのでしょうかね?

ENCODINGSHIFTJISさんが提示された情報の前半について、私なりにちょっとだけ
噛み砕いて書いてみました。後半については、私には検証して説明するだけのス
キルがありません。(^^;

[ ]
RE:03104 HDDの空き容量を知るNo.03105
アルビレオ さん 02/04/04 04:18
 
さらに横からすみません。

>ところで、私の環境では
<中略>
>|               7 個のディレクトリ   4,512,780,288 バイトの空き領域
>
>などと、dirでも同じ空き領域のバイト数が表示されます。
>ongaさんのところとは何かが違うのでしょうかね?

ひょっとするとdirコマンドの表示内容の違いはFATとNTFSの違いではないでしょうか?
こちらではNTFSの環境が手近にないので確認できませんが。

[ ]
RE:03105 HDDの空き容量を知るNo.03107
安久津 さん 02/04/04 17:46
 
こんにちは、安久津です。
私の環境は WindowsME, 秀丸 3.08 です。

●(1)
アルビレオさん書く。
>ひょっとするとdirコマンドの表示内容の違いはFATとNTFSの違いではないでしょうか?
>こちらではNTFSの環境が手近にないので確認できませんが。
なるほど。

●(2)
まふさん書く。
>|C:\>dir c:
> --- 省略 ---
>|               2 個のファイル                   0 バイト
>|               7 個のディレクトリ   4,512,780,288 バイトの空き領域

C:\>dir c:
     --- 省略 ---
        14 個             17,326 バイトのファイルがあります.
        14 ディレクトリ     11,372.73 MB の空きがあります.

C:\>
表示が違う。私の ME(FAT32) だと MB 単位。
場合によっては切実な問題かも。

●(3)
 onga さんへ。
以下は、コマンドラインでの全作業です。
showfs.bat は、パスの通っているところに保存してください。
showfs.js は、引数で指定されたドライブの空き容量を示します。
--------------------------------------------------------------
C:\>cd c:\windows\command

C:\WINDOWS\COMMAND>type showfs.js
function ShowFreeSpace(drvPath){
    var fso, d;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    try{
        d = fso.GetDrive(fso.GetDriveName(drvPath));
    }catch( e ){
        return drvPath + " " + e.description;
    }
    return "" + d.FreeSpace;
}
var len = WScript.Arguments.length;
var drv = "C:";
if( len != 0 ) drv = WScript.Arguments.item(0);
WScript.Echo( ShowFreeSpace( drv ) );

C:\WINDOWS\COMMAND>type showfs.bat
@echo off
cscript //nologo c:\windows\command\showfs.js %1

C:\WINDOWS\COMMAND>cd "C:\My Documents"

C:\My Documents>showfs c:
11920572416
C:\My Documents>showfs d:
12461785088
C:\My Documents>showfs d
d プロシージャの呼び出し、または引数が不正です。
C:\My Documents>showfs b:
b: このデバイスは使用できません。
C:\My Documents>showfs a:
c:\windows\command\showfs.js(9, 5) Microsoft JScript 実行時エラー: ディスクは準
備されていません。

C:\My Documents>exit
--------------------------------------------------------------

●(4)
秀丸マクロの方で次のようにすれば、
新規ファイルに結果を取得できます。
run "showfs.bat d: >con";

次のようにすれば、c:\temp\dir.txt に取得できます。
run "showfs.bat d: >c:\\temp\\dir.txt";

 onga さんの環境は XP なので、上記で取得できるかは分かりません。
run "cmd.exe /c showfs.bat d: >con";
run "cmd.exe /c showfs.bat d: >c:\\temp\\dir.txt";
とか、試してみてください。

では。

[ ]
RE:03107 解決しましたNo.03108
onga さん 02/04/04 20:59
 
encodingshiftjis 様
きいろいまふらあ 様
アルビレオ 様
安久津 様
ENCODINGSHIFTJIS 様

皆さんからのアドバイスをもとに いろいろ試した結果,
  fsutil volume diskfree c:
を使って ディスクの空き容量を知ることができました。
これでようやく  秀丸マクロを修正できます。

xp になって fsutil 他 いろいろなコマンドが使えるように
なっていることを始めて知りました。 大変勉強になりました。
ありがとうございました。

なお, dir コマンドの応答についてですが,
私のシステムは
   c:\ ⇒ NTFS  
   e:\ (MO) ⇒ FAT,
   F:\ (HDD) ⇒ FAT32
となっています。
それぞれについてdir コマンドを使ってみましたが,
どれも
   「***** バイトが使用可能です.」
という応答になっていました。
なぜ システムによって 応答の内容が違うんでしょうね?


[ ]