- ベストアンサー
WINDOWS CMDからゴミ箱のファイル一覧を表示したいのですが
普通のファイルはDIRで見ることができるのですが、ゴミ箱のなかの一覧を表示する事はできないでしょうか。バッチファイルを作ってみたいのです。もしバッチでは無理でも、VBSでこのコマンドを調べろ等のアドバイスでも歓迎致します。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス ・昨日この質問を見ました。 不可能だろうと思い回答は付かずに削除することになるのかと思いました。 でも今見たら4人の回答が付いていてビックリです。 >普通のファイルはDIRで見ることができるのですが、 >ゴミ箱のなかの一覧を表示する事はできないでしょうか。 ↑ 私は難しいと思います。 >バッチファイルを作ってみたいのです。もしバッチでは無理でも、 >VBSでこのコマンドを調べろ等のアドバイスでも歓迎致します。 ↑ バッチファイルで手軽に作れる代物ではありません。 また、VBScript でも同じく難しいと思います。 ・回答者 No.2 さんのシェル API の SHGetSpecialFolderPath()、や SHGetSpecialFolderLocation() でも ごみ箱のパスは取得できません。プログラミング言語で組んでみれば分かりますが、ごみ箱は特殊フォルダの 中でもさらに特殊なフォルダです。つまり、これは回答者 No.4 さんのアドバイスにあるように COM の 操作なのです。 ・しっかりとしたプログラミング言語でもかなり面倒ですので VBスクリプトでは難しいと思いますが、 ちょっとネット検索したら発見しました。あっ。見つかった!驚き。 http://www.vector.co.jp/soft/win95/util/se358619.html→『RecycleBin.VBS』 ↑ これをダウンロードして VBS のソースを覗けばかなり参考になると思います。 ・他にも http://www.vector.co.jp/soft/win95/util/se313491.html→『remove.VBS』 も発見しました。これまた驚き! 最後に: ・google で『VBS ごみ箱』キーワードで検索したら意外にもあっさりと上記のリンクが 発見できました。質問者さんもネット検索していろいろと調査してみて下さい。 ・ちなみにごみ箱の CLSID は {645FF040-5081-101B-9F08-00AA002F954E} です。 ごみ箱は C:\RECYCLER のフォルダ内に次のフォルダが存在します。→私の環境では。 S-1-5-21-2542231476-452065110-2610527649-1003 S-1-5-21-368736507-2188885818-133487176-1006 S-1-5-21-484763869-1035525444-839522115-1003 ↑ このうち2つ目のフォルダにごみ箱に捨てたファイルが格納されます。 2007/06/28 23:52 19,226,445 Dc63.zip 2007/06/29 00:01 25,572,210 Dc64.zip 2007/06/28 23:55 23,371,622 Dc65.zip 2007/06/29 00:03 30,323,061 Dc66.zip 2007/06/29 08:43 18,990,717 Dc67.zip 2007/06/29 08:45 18,360,969 Dc68.zip 2005/07/25 11:14 729 Dc69.html 2007/06/29 08:49 12,816,675 Dc70.zip 2007/06/29 09:05 2,660 Dc71.htm ↑ 私の環境です。 見れば分かると思いますがファイル名が『DcXX.拡張子』となっています。 ファイル名の情報は同じフォルダにある INFO2 という隠しファイルにバイナリ形式で 記録されています。このファイルの詳細は調べないと分かりませんが回答者 No.4 さんが 調べてたようです。そちらを参考に。 ・以上。参考になりますかね?
その他の回答 (4)
- noocyte
- ベストアンサー率58% (171/291)
ごみ箱は以前少し調べたことがあったので,今回も少し調べてみました. > WINDOWS CMDからゴミ箱のファイル一覧を表示したいのですが ↓ C++ の (怪しい?) ソースがあります.(2番目のリスト) http://mtamaki.cocolog-nifty.com/blog/2005/01/post_f992.html COM は使ったことがないのでよくわかりませんが, IShellFolder インタフェースの EnumObjects,GetDisplayNameOf を 使うのがポイントのようです. COM は VB からだともっと簡単に使えると思いますが, VB も使ったことがないので説明は略. ●実際に動かして確かめてみたこと (Windows XP Pro SP2) ・ごみ箱のフォルダ名は,各ドライブの <drive>:\RECYCLER\<OwnerSID> (隠しフォルダ). <OwnerSID> は,ユーザの Security ID で,次のような文字列. "S-1-5-21-1234567890-123456789-123456789-1234" したがって複数ユーザが使用している PC では,ユーザごとに作られるはず. オブジェクトを識別するSIDとは? http://www.atmarkit.co.jp/fwin2k/win2ktips/307sid/sid.html <OwnerSID> は,GetSecurityDescriptorOwner() で取得可能らしい. 使用例:http://nienie.com/~masapico/api_GetSecurityDescriptorOwner.html ・ごみ箱のファイルに関する情報は,隠しファイル <drive>:\RECYCLER\<OwnerSID>\INFO2 にある.その内容を調べてみた. (1) ヘッダ (20バイト):内容不明.内容固定? INFO2 Size:20(0x00000014) 00000000 05 00 00 00 00 00 00 00-00 00 00 00 20 03 00 00 00000010 00 00 00 00 (2) ごみ箱のファイルのうち,<drive>: で削除されたものの内容 (800バイト固定長) の繰り返し. (a) 元のファイル名 (マルチバイト文字列,char ansiPathName[MAX_PATH (=260)]) ・余白は '\0' で埋める. ・ファイルを元に戻した場合,最初の1バイトが '\0' になる. (b) 1から始まる連番? (DWORD) (c) ドライブ番号? (DWORD,A:0,B:1,…) (d) 12バイト (未確認,削除時刻と属性フラグか?) (e) 元のファイル名 (UTF-16 文字列,wchar_t unicodePathName[MAX_PATH (=260)]) ・余白は L'\0' で埋める. ・元に戻しても変更されない. ・ごみ箱内のファイルの実体は, <drive>:\RECYCLER\<OwnerSID>\D<drive><number>.<元の拡張子>. ただし2番目の <drive> は小文字,<number> は1から始まる連番 (たぶん INFO2 内の連番に対応) で,ファイルを元に戻すと欠番になる. ●参考 ごみ箱がファイルを格納する方法 (Windows 95/98SE/NT Server 4.0 Standard Ed./NT Workstation 4.0 Developer Ed.) http://support.microsoft.com/?scid=kb%3Bja%3B136517&x=13&y=12 (原文) http://support.microsoft.com/default.aspx?scid=kb;EN-US;q136517
お礼
アドバイスありがとうございました ご親切な回答ありがとうございます。しかし私には少し荷が重そうです。 いいものが出てくるまで、しばらく頭の中に温存しておきます。
- umasikajiro
- ベストアンサー率67% (545/803)
外していると思いますが、、、 XPhomeの場合だと フォルダオプションの「保護されたオペレーティング システム ファイルを表示しない」のチェックを外してから 見てみると ゴミ箱は C:\RECYCLER\S-1-5-21-3761373227-979953713-3912014981-1005 と言うフォルダであることが判ります (数字部分は状況で違うはず) このフォルダ名\S-1-中略-1005で検索すると C:\Documents and Settings\ユーザー名\Application Data\Microsoft\Credentials と C:\Documents and Settings\ユーザー名\Application Data\Microsoft\Protect の中に同じ名前のフォルダが見つかりますが 前者は空っぽ 後者はバイナリーファイルがいくつか入っています これらが関係あるのか無いのかすら私には判りません。アシカラズ
お礼
アドバイスありがとうございました 私には少し荷が重そうです。いいものが出てくるまで、頭の中に温存しておきます。
- yatteyaruj
- ベストアンサー率26% (4/15)
はっきり言って、一筋縄ではいかないようです。興味あったので、ちょっと調べてみるか、すぐ出来るだろう、と思ったらドはまりました。 実際、ソースを組んでやってみたところ、シェルAPIの SHGetSpecialFolderPath()、または、SHGetSpecialFolderLocation() の引数に CSIDL_BITBUCKET を指定すると、レジストリの\HKEY_CLASSES_ROOT\CLSID を示す文字列を返す(ただし、配列の先頭が0になっている)、ところまではつかんだのですが、そこからどうする、という情報が調べても出てきません。レジストリを見てみると、それらしいことが書いてありますが、どうすれば良いやら。役に立たない情報ですいません。だれかフォローを。
お礼
アドバイスありがとうございました
- SRitchie
- ベストアンサー率21% (103/470)
ファイルのアトリビュート(属性)指定で見えないんじゃなくて? もし、これだけなら、"dir" に "/a"オプションで、表示ファイルを指定できるけど… (オプションの指定の仕方はヘルプで見てください。)
お礼
アドバイスありがとうございました
お礼
ご親切な回答ありがとうございます。 今回”私には少し荷が重そうです”という事が分かった事が収穫です。 いいものが出てくるまで、しばらく頭の中に温存しておきます。