No.1
- 回答日時:
エクスプローラの検索機能で更新日時の範囲を
20年くらい前から1ヶ月前の日時までに指定して
検索にひっかかったファイルをまとめてゴミ箱に
入れる方法では不都合ですか?
この回答への補足
御提案の方法だと、削除しようとする意思が必要ですよね。
それを忘れてしまうので「自動的に」(タスク的に)削除してくれるツールが欲しいのです。
Windows起動時に、毎回チェックしてくれるような....
そういう手段を探しています。
No.2
- 回答日時:
御回答有難うございます。なかなか使えそうなソフトですね。
早速使ってみて、周りの評判がよければ採用したいと思います。
また分からないことがあったら、よろしくお願いします。
No.3
- 回答日時:
作ってみたので、もしよかったら使ってみてください。
一応これだといきなり削除!じゃなくて、ごみ箱へ移動するだけです。
下の「ここから」から「ここまで」をノートパッドにコピー&ペーストして、
「名前をつけて保存」でファイルの種類を「すべてのファイル」、
ファイル名を「~.js」にして保存すると(~はなんでもいい)
黄色い巻物みたいなアイコンのファイルができると思います。
これをダブルクリックすると使い方の説明ウィンドウが出てきます。
どこの馬の骨とも知れぬ者が書いたプログラムなので
変なコードが仕組まれてないかどうか怖いかとも思いますが、そのときは
コンピューター [技術者向け] > プログラミング > JavaScript
で「これ大丈夫ですか?」と聞いてみてください。
//----------------------------- ここから
var FSO = WScript.CreateObject("Scripting.FileSystemObject");
var WshShell = WScript.CreateObject("WScript.Shell");
var Shell = WScript.CreateObject("Shell.Application");
var oArgs = WScript.Arguments;
var nMode,nTimeBack,strFolder;
var oTrash = Shell.Namespace(10);
var oNow = new Date();
var nNowYear = oNow.getFullYear(); var nNowMonth = oNow.getMonth()+1; var nNowDay = oNow.getDate();
oNow = new Date(nNowYear,nNowMonth-1,nNowDay);
oPrevDate = null;
var strTitle = "古いファイルをゴミ箱に入れるプログラム";
function help(){
WshShell.Popup(
" [使い方]\n"
+ " コマンドラインから実行します。\n"
+ " C:\\Temp\\内において、最近1ヶ月更新がないファイルをゴミ箱に入れるときは\n\n"
+ " " + FSO.GetSpecialFolder(1) +"\\CScript.exe \"" + WScript.ScriptFullName + "\" -m 1 \"C:\\Temp\\\" \n\n"
+ " のように記述します。\n"
+ " タスクに登録するときは、上のまま最後のフォルダ名だけ変えればOK。\n"
+ " コマンドプロンプトでも上のまま打って実行可能です。\n"
+ " タスクに登録する前に、コマンドプロンプトに打ってテストしてください。\n\n"
+ " [オプション]\n"
+ " -y n\t\t更新がn年前より古いファイルをゴミ箱に入れます。\n"
+ " -m n\t\t更新がnヶ月前より古いファイルをゴミ箱に入れます。\n"
+ " -d n\t\t更新がn日前より古いファイルをゴミ箱に入れます。\n\n"
+ " [補足]\n"
+ " オプションは一個だけにしてください。\n\n"
+ " (C) 2004 komugi100g"
, 160, strTitle, 0 + 64);
WScript.Quit(0);
}
function throwTrash(strSubFolder){
var oFolder = Shell.NameSpace(strSubFolder);
var TargetFolder = FSO.GetFolder(strSubFolder);
var TargetFolderFiles = new Enumerator(TargetFolder.files);
var TargetFolderSubFolders = new Enumerator(TargetFolder.SubFolders);
for(; ! TargetFolderFiles.atEnd(); TargetFolderFiles.moveNext()){
var oFile = FSO.GetFile(TargetFolderFiles.item());
var oFileDate = oFile.DateLastModified;
var flag;
switch(nMode){
case 0: flag = (oPrevDate - oFileDate)>0?1:0; break;
case 1: flag = (oPrevDate - oFileDate)>0?1:0; break;
case 2: flag = parseInt((oNow - oFileDate)/(24*60*60*1000))>nTimeBack?1:0; break;
default: flag = 0;
}
if(flag==1){
var oFolderItem = oFolder.ParseName(FSO.GetFileName(TargetFolderFiles.item()));
var oExec = WshShell.Exec("CScript \"" + WScript.ScriptFullName + "\" -r");
oFolderItem.InvokeVerb("削除(&D)");
for(j=0;j<100;j++){
if(oExec.Status==1) break;
WScript.Sleep(200);
}
oExec.Terminate();
}
}
for(; ! TargetFolderSubFolders.atEnd(); TargetFolderSubFolders.moveNext()){
throwTrash(TargetFolderSubFolders.item());
}
}
try{
if(oArgs(0).charAt(0)=='-'){
switch(oArgs(0).charAt(1).toUpperCase()){
case 'Y': nMode = 0; break;
case 'M': nMode = 1; break;
case 'D': nMode = 2; break;
case 'R':
for(i=0;i<100;i++){
if(WshShell.AppActivate("ファイルの削除の確認")){
WshShell.SendKeys("y"); break;
}
WScript.Sleep(200);
}
WScript.Quit(0);
default: throw new Exception();
}
}else{ throw new Exception() }
if(! isNaN(oArgs(1))) nTimeBack = oArgs(1); else throw new Exception();
strFolder = oArgs(2);
if(nMode==0) oPrevDate = new Date(nNowYear-nTimeBack,nNowMonth-1,nNowDay);
else if(nMode==1) oPrevDate = new Date(nNowYear-parseInt((nTimeBack-nNowMonth+12)/12),nNowMonth-nTimeBack+parseInt((nTimeBack-nNowMonth+12)/12)*12-1,nNowDay);
}catch(e){
help();
}
if(FSO.FolderExists(strFolder)){
throwTrash(FSO.GetAbsolutePathName(strFolder));
}else{
WshShell.Popup("指定されたフォルダが存在しません。",20,strTitle,0+48);
}
//----------------------------- ここまで
御回答有難うございます。というか... なんか、すごいモノを書いていただいているようで、恐縮の限りです。
起動時に自動的に実行するには、コマンド行を書き込んだバッチファイルを作成して、スタートアップから起動させればいいのでしょうか?
バッチファイル... 個人的には問題ないつもりなのですが、周りの声が気になるところです。
ともあれ、こんな質問の回答をソースコードで教えていただき、有難うございました。
No.4ベストアンサー
- 回答日時:
いや、それほどすごい内容じゃないです…。
WSHというプログラムに慣れるための練習に
自己満で書いてるだけなんでお気になさらず。
#3で2つバグがあったんで治しておきました。
1.「ファイルの削除の確認」画面が消えないことがある。
2.削除の確認メッセージを表示しない設定のときに
ちゃんとごみ箱に移動できない。
スタートアップに登録するときは、
もちろんバッチファイルを作ってもいいですが、
一度~\CScript.exeのショートカットを作ってから
そのショートカットのプロパティ→ショートカット
の「リンク先」に追加記述しても可能です。
//----------------------------- ここから
var FSO = WScript.CreateObject("Scripting.FileSystemObject");
var WshShell = WScript.CreateObject("WScript.Shell");
var Shell = WScript.CreateObject("Shell.Application");
var oArgs = WScript.Arguments;
var nMode,nTimeBack,strFolder;
var oNow = new Date();
var nNowYear = oNow.getFullYear(); var nNowMonth = oNow.getMonth()+1; var nNowDay = oNow.getDate();
oNow = new Date(nNowYear,nNowMonth-1,nNowDay);
oPrevDate = null;
var strTitle = "古いファイルをゴミ箱に入れるプログラム";
function help(){
WshShell.Popup(
" [使い方]\n"
+ " コマンドラインから実行します。\n"
+ " C:\\Temp\\内において、最近1ヶ月更新がないファイルをゴミ箱に入れるときは\n\n"
+ " " + FSO.GetSpecialFolder(1) +"\\CScript.exe \"" + WScript.ScriptFullName + "\" -m 1 \"C:\\Temp\\\" \n\n"
+ " のように記述します。\n"
+ " タスクに登録するときは、上のまま最後のフォルダ名だけ変えればOK。\n\n"
+ " [オプション]\n"
+ " -y n\t\t更新がn年前より古いファイルをゴミ箱に入れます。\n"
+ " -m n\t\t更新がnヶ月前より古いファイルをゴミ箱に入れます。\n"
+ " -d n\t\t更新がn日前より古いファイルをゴミ箱に入れます。\n\n"
+ " [補足]\n"
+ " ・オプションは一個だけにしてください。\n\n"
+ " (C) 2004 komugi100g"
, 120, strTitle, 0 + 64);
WScript.Quit(0);
}
function throwTrash(strSubFolder){
var oFolder = Shell.NameSpace(strSubFolder);
var TargetFolder = FSO.GetFolder(strSubFolder);
var TargetFolderFiles = new Enumerator(TargetFolder.files);
var TargetFolderSubFolders = new Enumerator(TargetFolder.SubFolders);
for(; ! TargetFolderFiles.atEnd(); TargetFolderFiles.moveNext()){
var oFile = FSO.GetFile(TargetFolderFiles.item());
var oFileDate = oFile.DateLastModified;
var flag;
switch(nMode){
case 0: flag = (oPrevDate - oFileDate)>0?1:0; break;
case 1: flag = (oPrevDate - oFileDate)>0?1:0; break;
case 2: flag = parseInt((oNow - oFileDate)/(24*60*60*1000))>nTimeBack?1:0; break;
default: flag = 0;
}
if(flag==1){
var oFolderItem = oFolder.ParseName(FSO.GetFileName(TargetFolderFiles.item()));
oFolderItem.InvokeVerb("削除(&D)");
}
}
for(; ! TargetFolderSubFolders.atEnd(); TargetFolderSubFolders.moveNext()){
throwTrash(TargetFolderSubFolders.item());
}
}
try{
if(oArgs(0).charAt(0)=='-'){
switch(oArgs(0).charAt(1).toUpperCase()){
case 'Y': nMode = 0; break;
case 'M': nMode = 1; break;
case 'D': nMode = 2; break;
case 'R':
while(true){
if(WshShell.AppActivate("ファイルの削除の確認")){
WshShell.SendKeys("y");
}
WScript.Sleep(100);
}
WScript.Quit(0);
default: throw new Exception();
}
}else{ throw new Exception() }
if(! isNaN(oArgs(1))) nTimeBack = oArgs(1); else throw new Exception();
strFolder = oArgs(2);
if(nMode==0) oPrevDate = new Date(nNowYear-nTimeBack,nNowMonth-1,nNowDay);
else if(nMode==1) oPrevDate = new Date(nNowYear-parseInt((nTimeBack-nNowMonth+12)/12),nNowMonth-nTimeBack+parseInt((nTimeBack-nNowMonth+12)/12)*12-1,nNowDay);
}catch(e){
help();
}
if(FSO.FolderExists(strFolder)){
var oExec = WshShell.Exec("CScript \"" + WScript.ScriptFullName + "\" -r");
throwTrash(FSO.GetAbsolutePathName(strFolder));
oExec.Terminate();
}else{
WshShell.Popup("指定されたフォルダが存在しません。",20,strTitle,0+48);
}
//----------------------------- ここまで
No.5
- 回答日時:
35行目あたり
var oFolder = Shell.NameSpace(strSubFolder);
は
var oFolder = Shell.NameSpace(strSubFolder+"\\");
と「+"\\"」が必要でした。
失礼。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- PDF PDFを自動添付したメールを送信してくれるツールを探しています。 2 2023/02/07 15:19
- Windows 10 Windows 10の[アプリと機能]に表示されない旧バージョンのアプリを削除したい 1 2022/04/05 20:25
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Windows 10 フォルダをパソコンから削除してもまた現れます。 5 2023/04/15 11:45
- iCloud 【至急】 自分のiPhoneの中にある写真をパソコンに取り込むために、iCloudから写真をUSBケ 2 2023/07/06 21:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/04 10:48
- ノートパソコン ソフトアンインストール残存ファイル 3 2022/09/13 18:15
- フリーソフト テキストファイル内を検索したい 1 2022/06/01 08:33
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
thunderbirdのメールが見れなく...
-
イラレ10 動作が急に遅く(不...
-
ACCESS、VBAでEXCELファイルを...
-
Excelの履歴を、過去1月に渡っ...
-
共有ファイルを誰かが勝手に操...
-
DVD shrinkでのISOファイル作成...
-
壊れたPowerPointファイルの修...
-
iTunesの曲を外付けHDDに移動さ...
-
VCFファイル内の同一ファイルを...
-
仮想isoイメージファイルの書き...
-
Photoshop初心者です。 Photosh...
-
複数テキストファイルの内容を...
-
フォルダの削除について
-
ワードパットをワードに
-
パワーポイントのスライドを1...
-
USBメモリの中のデータが削除で...
-
ファイル移動中にデータが消えた!
-
Outlook メールの添付ファイル...
-
コマンドプロンプト 閉じた時の...
-
画像をデスクトップに貼り付け...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Mobile SyncによるPCのCドライ...
-
Excelの履歴を、過去1月に渡っ...
-
共有ファイルを誰かが勝手に操...
-
ACCESS、VBAでEXCELファイルを...
-
これってウイルスですか?
-
EXCELで特定ファイルの動作が重い
-
仮想isoイメージファイルの書き...
-
VBAでファイルを消したい
-
DVD shrinkでのISOファイル作成...
-
本当に削除して、良いのでしょ...
-
VCFファイル内の同一ファイルを...
-
EXIF情報の削除をした後、プロ...
-
大至急お願い致します。 ファイ...
-
同じファイルを保存してもSSDと...
-
hardcopy.log って何ですか?
-
「WININET.DLLが見付か...
-
1行単位で差分を出力するテキス...
-
LanでつないだHDDの最適化を行...
-
イラレ10 動作が急に遅く(不...
-
thunderbirdのメールが見れなく...
おすすめ情報