アプリ版:「スタンプのみでお礼する」機能のリリースについて

powershellでlinuxのduコマンドのような事がしたい。

linuxのduコマンドはディレクトリの容量を知ることができますが、
同じ事をwindowsのpowershellで出来ないでしょうか。

A 回答 (3件)

あ、-Path の指定忘れてましたね……。

(汗

おっしゃる通り、-Path で指定したディレクトリの中にあるファイルの合計サイズが出ます。(指定しないとカレントディレクトリ内)

ちなみにディスクドライブ全体のサイズは Get-PSDrive コマンドで出るみたいですね
    • good
    • 0
この回答へのお礼

ありがとうございます。

あ、そうか!
カレントでしたか。
言われてみると普通のことですが、何の値か分からずにしばらく困っていました。

Get-PSDrive コマンドも試したした。
これはこれで別途使えそうなので、ありがとうございます。

お礼日時:2010/05/27 13:07

PowerShell には du のようなディレクトリサイズを量るコマンドはなかったと思うので、自分で作るしかないでしょう。

こんなんでどうですか?

Get-ChildItem -Recurse -Force | ForEach-Object -Begin { $i = 0 } -Process { $i = $i + $_.Length } -End { $i }

この回答への補足

ありがとうございます。

実行してみたところ、
結果は
454,932,877

実際のcドライブの使用容量は
78,522,511,360

大きくかけ離れました。

折角なので、どうにか使えないものかと試してみたところ、
-Pathで指定した場所の容量は正しく出てそうでした。

Get-ChildItem -Path "c:\Documents and Settings" -Recurse -Force | ForEach-Object -Begin { $Len = 0 } -Process { $Len = $Len + $_.Length } -End { $Len }
結果は
1,271,990,831

実際の"c:\Documents and Settings"の使用容量も
1,271,990,831

謎解きに時間が掛かってしまいましたが、こういう事でしょうか?

補足日時:2010/05/26 13:13
    • good
    • 1

#普段Windows XPしか使ってないのでLinuxのコマンドよくわかりません。


#PowerShell標準のコマンドにはなさそうだったので、ゴリゴリとコードを書くハメに。プログラミングそのものなので、人によってはperlとかphpとか使いたくなるんじゃね、とか思った。面倒なので各種オプションは実装してないし、ファイルにしてコマンドライン引数受け取ったりしてないけど、プログラミングが出来ればそんなに難しくはないでしょう。
#自力実装したけどぶっちゃけ誰かが既に作ってそうな気がします。
====================コード=================
$dict = New-Object -typeName "System.Collections.Generic.Dictionary``2[System.IO.FileSystemInfo,System.Int64]"

$rd = New-Object -typeName "System.IO.DirectoryInfo" -argumentList "D:\himajin100000\x86\Environment\Application"

foreach($d in $rd.GetDirectories("*",[System.IO.SearchOption]::TopDirectoryOnly)){
$x = 0
foreach($f in $d.GetFiles("*",[System.IO.SearchOption]::AllDirectories)){
$x = $x + $f.Length
}

$dict.Add($d,$x)
}

foreach($f in $rd.GetFiles("*",[System.IO.SearchOption]::TopDirectoryOnly)){
$dict.Add($f,$f.Length)
}
foreach($kv in $dict.GetEnumerator()){
[System.String]::Format("{0:s} {1:d}",$kv.Key,$kv.Value)
}
=================結果==================
Archiver 83836
b2x 875008
Development 26622315
Documents 265807804
Images 84152605
Mail 87406143
Management 19092745
TextEditor 1793048
aaa.txt 105
==============その他================
以下を参考にしましたが、Lengthプロパティを合計する、という実装になっており

以下のコードを実際に使ってみたところ、Lengthが全て空になっている状況、つまりフォルダしか存在しないディレクトリの内容を表示させようとしたとき、例外が発生し(フォルダとファイルが混在するものはOKでした)、何故かこれをうまく捕捉出来なかったので自力実装しました。

https://www.microsoft.com/technet/scriptcenter/r …

尚、"D:\"を直接指定したら"D:\System Volume Information"フォルダへのアクセス権を持たないために刎ねられてしまいました(汗

その他、PowerShellって.NET 4.0のメソッドとか使えないみたいね。System.IO.DirectoryInfo.GetFilesとかは最後まで値を求めないと制御が戻らないため、コードによってはSystem.IO.DirectoryInfo.EnumerateFiles何かは結構使いそうなものですが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
o/sが変わればコマンド1つで出来ることも結構大変な事になってしまうのですね。

お礼日時:2010/05/24 13:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!