2015年2月23日月曜日

おのれ「リパース ポイント」め!

最近ハードディスクが圧迫してきたのでどこが重いのか調べる事にしました。

まさか、エクスプローラーで一つ一つ容量を確認するなんてかったるいので
簡単なスクリプトを組むことに
取り敢えず一階層におけるフォルダーの列挙ととサイズの表示すればいいかというわけで


fo=inputbox("folder path")

with createobject("scripting.filesystemobject")
for each fos in .getfolder(fo).subfolders
wsh.echo fos.name & " : " & fos.size
if err.number then wsh.echo fos.name & " : " & "err"
next
end with



適当なフォルダーでテストして問題事を確認して、いざC配下でCscriptで実行
「書き込みできません」


ん?んんん?コードに間違えはない。
じゃぁ、どこでこけているのか調べる事に


fo=inputbox("folder path")

with createobject("scripting.filesystemobject")
for each fos in .getfolder(fo).subfolders
On Error Resume Next
wsh.echo fos.name & " : " & fos.size
if err.number then wsh.echo fos.name & " : " & "err"
On Error goto 0
next
end with



先ずは「google」フォルダーこれはどうやら配下の「CrashReports」フォルダーにアクセス権限が無かったことが問題らしい。
でもこれエクスプローラーでは容量でるのになんでfilesystemobjectじゃ駄目なんだろうか・・・
いやまぁこれは(あまり納得できないけども)権限の永続許可で解決したので良いとして




次に「Windows NT」フォルダーでこけました。中に入ってさらにsubfolderでリストを出力してみると「アクセサリ」というフォルダーに弾かれているらしい。
エクスプローラーからアドレス直打ちしてみたところ弾かれた。
どれもこれもアクセスが拒否される。という事で調べてみたところ

以下記事が見つかった
カテゴリ「Visual Studio Express Editions  >  Visual C# Express Edition」
タイトル「ファイル検索プログラム作成でアクセス拒否」

ここに出てくる「earch.txt」のリストと会話の流れで「リパース ポイント」が原因なのがわかりました。


普通一般家庭じゃwindowsしか使ってないだろうから
シンボリックリンクの方は知っているって方が珍しいかもしれないけどまぁシンボリックリンクのほうは知ってたのでこんなツイートに


まぁ、そして今に至るわけです。
とにかく解決するのであれば、一階層でサイズが取得できなかった場合下のフォルダへ入って行って延々と再帰でフォルダーの容量を漁るればいい。

たーだー、容量をちょっと確認したいだけなのに面倒すぎる。
エクスプローラーはだって容量見れるじゃないか・・・ぐぬぬ←今ここ









0 件のコメント:

コメントを投稿