• 締切済み

2日以前のファイルを削除するワイルドカーの指定方法について教えてください。

現在日時から2日以前のファイルを削除対象とします。 ファイル名は以下のようになっています。 20081112162021_aaa_bbb.tmp 20081113162021_aaa_ccc.tmp 20081114162021_aaa_ddd.tmp 20081115162021_aaa_eee.tmp 2日以前を削除なので、11月12日と11月13日のファイルが 消えてくれればOKです。 削除対象となるファイル数は、多いと思うので、 1ファイルずつ消すという方法(DeleteFileやRemove)は、 考えていません。 以下のサンプルを見つけたのですが、 ワイルドカード指定で、2日以前のファイルだけを削除対象する ワールドカードの書き方が分からないので教えてください。 #include <windows.h> int main() { SHFILEOPSTRUCT sfo = { 0 };   sfo.wFunc = FO_DELETE; sfo.pFrom = TEXT( "D:\\Temp\\*.tmp" ); sfo.fFlags = FOF_NOCONFIRMATION; ::SHFileOperation( &sfo ); return 0; } C++ Windows2003Server

みんなの回答

noname#71644
noname#71644
回答No.3

OSやアプリケーションが一時的に作成する作業用ファイルにつく拡張子。 大体はアプリケーション終了時などに削除される。 チエチエ(*ノωノ)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

ワイルドカードは正規表現ではないので「特定の文字だけヒットさせる」ということは不可能です。 また正規表現を使えたとしても日付パターンマッチは面倒でしょう。 ファイル名を取得して頭8文字分を日付に変換し、今日の日付と比較した結果で削除する・しないを判断する方法が楽かと思いますよ。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

Windowsには、そういう便利なワイルドカードは無い。 やるなら 19*.tmpを削除 // 19xx年の物は全部削除 2000*.tmpを削除 // 2000年の物は全部削除 2001*.tmpを削除 // 2001年の物は全部削除 2002*.tmpを削除 // 2002年の物は全部削除 2003*.tmpを削除 // 2003年の物は全部削除 2004*.tmpを削除 // 2004年の物は全部削除 2005*.tmpを削除 // 2005年の物は全部削除 2006*.tmpを削除 // 2006年の物は全部削除 2007*.tmpを削除 // 2007年の物は全部削除 20080*.tmpを削除 // 2007年01~09月の物は全部削除 200810*.tmpを削除 // 2007年10月の物は全部削除 2008110*.tmpを削除 // 2007年11月01~09日の物は全部削除 20081110*.tmpを削除 // 2007年11月10日の物は全部削除 20081111*.tmpを削除 // 2007年11月11日の物は全部削除 20081112*.tmpを削除 // 2007年11月12日の物は全部削除 20081113*.tmpを削除 // 2007年11月12日の物は全部削除 って事をするしかありません。 当然、上記の処理は「削除範囲が固定されてる」ので「11/15にしか実行出来ず、それより前も、それより後も、実行してはダメ」です。

meyouseum
質問者

お礼

ありがとうございます。 とても参考になりました。

関連するQ&A

  • フォルダの削除について

    Cでのフォルダの削除方法が分からず困っています。 ファイルの削除は"remove()"で行うことができましたが、フォルダは同じ方法ではできないようです。 No.394869 の質問を参考にして"SHFileOperation()"を使用してみたのですが、エラー担ってしまいました。(Access Violation) "SHFILEOPSTRUCT"の値の設定(ハンドルなど)がうまくいっていないのかな?とも思ったのですが、 どうすればよいのかわかりません。 別の方法があればそれでもいいですし、"SHFileOperation()"の使い方(ハンドルの設定など)を知りたいのでよろしくお願いします。 ちなみに、今は以下の方法でやっていました。 フォルダ内(testfolder)は空の状態です。 ******************************************** SHFILEOPSTRUCT shfileop; /* ファイルの削除 */ shfileop.hwnd = NULL; shfileop.wFunc = FO_DELETE; shfileop.pFrom = "C:\\TEST\\testfolder"; shfileop.fFlags = FOF_SIMPLEPROGRESS|FOF_NOCONFIRMATION; SHFileOperation(&shfileop);

  • SHFileOperationについて

    こんにちは。 タイトルの通り、APIのファイルフォルダコピー関数に関する質問です。現在VisualBasicでの操作なので、こちらへ掲載させていただきました。 まず環境ですが、 PC:VAIOノート2001年製 OS:Windows2000Pro 外付けフロッピー(A:)ドライブ:Logitec製USBバスパワードライブ 以上の条件で、下記のロジック Function FileCopy(frm_ctrl As Form, source As String, destination As String) As Variant Dim lpFileOp As SHFILEOPSTRUCT Dim lngRetValue As Long With lpFileOp .hWnd = frm_ctrl.hWnd .wFunc = FO_COPY .pFrom = source .pTo = destination .fFlags = FOF_NOCONFIRMATION Or FOF_NOCONFIRMMKDIR Or FOF_MULTIDESTFILES Or _ FOF_SIMPLEPROGRESS .fAnyOperationsAborted = True .hNameMappings = 0& .lpszProgressTitle = "コピー" End With lngRetValue = SHFileOperation(lpFileOp) If lngRetValue <> 0 Then MsgBox "ファイルコピーに失敗しました。" End If AplFileCopy = lngRetValue End Function を実行した場合、デザイン環境または実行したexeが強制終了させられ、エラーメッセージが表示されます。 ステップインで追跡した結果、"SHFileOperation(lpFileOp)"の箇所で発生していたのですが、原因が分かりません・・・ちなみにWindowsXPで実行した場合、デザイン環境時のみエラーが発生し、実行環境では正常にファイルコピーが完了しました。 以上から、SHFileOperation()がエラーを発生させる原因または、これを回避・解消する方法をご存知の方、おられましたら、教えてください。 よろしくお願いします。

  • CSting を TCHAR [] に変換したい。

    Visual Sutdio 2010 , VC++ , MFC でファイルリスト一覧作成ソフトを作っている者です。 CSting 型の _T("~\0~\0\0") を TCHAR [] に変換したいです。 CSting 型の変数名は、DeleteFilePathです。 '\0' を他の文字に置換して確認した所、正しく入っています。 現在は、4096文字の文字列配列に入れています。 ゴミ箱に移動できる時とできない時があります。 _______________________________________________________________________________ ■現在のコード  index = -1;  while ((index = CFileListCreatorDlg::m_xcList.GetNextItem  (index, LVNI_ALL | LVNI_SELECTED)) != -1)  {   CString FullPathString = CFileListCreatorDlg::m_xcList.GetItemText(index,2);   if (FullPathString.Right(1) != _T("\\")){     ::SetFocus(::GetDlgItem(m_hWnd,IDC_LIST));    FullPathString.Replace(_T ("\\"),_T("\\\\"));    DeleteFilePath = DeleteFilePath + FullPathString + _T('\0');    CFileListCreatorDlg::m_xcList.DeleteItem(index);   }   index--;  }  DeleteFilePath = DeleteFilePath + _T('\0');  _TCHAR cszPath[4096];   // TCHAR型  _tcscpy(cszPath, DeleteFilePath);  // CString型→TCHAR型  SHFILEOPSTRUCT sfs;  memset ( &sfs, 0, sizeof ( SHFILEOPSTRUCT ) );  sfs.fFlags = FOF_NOERRORUI | FOF_SIMPLEPROGRESS | FOF_ALLOWUNDO;// ゴミ箱へ移動の確認をする場合 FOF_ALLOWUNDO をつける;  sfs.wFunc = FO_DELETE;  sfs.pFrom = cszPath;  if ( 0 != SHFileOperation ( &sfs ) )  {   MessageBox(_T("ゴミ箱に移動できませんでした"),_T("SHFileOperation 失敗"),MB_OK);   return 0;  } _________________________________________________________________________________________________________________________________________________ 5回に1回成功するので、不思議です。 ファイルのパスは、リストコントロールのアイテムに格納されていて、 削除したいアイテムを選択肢、Shift + Delete で、ゴミ箱に削除する ユーザー関数が呼び出されます。(ゴミ箱に移動するだけで、確認メッセージは出なくていいです。) 今まで、具体的した事を記すと以下のようになります。 cszPath = const_cast<LPTSTR>(static_cast<LPCTSTR>DeleteFilePath;  //ビルドエラー としたり、 _TCHAR cszPath[DeleteFilePath.GetLength()];  // TCHAR型 としたり、 TCHAR cszPath[256];  // TCHAR型 _tcscpy(cszPath, DeleteFilePath);  // CString型→TCHAR型 ・・・とやってみましたが、出来ません。 http://www.usefullcode.net/2006/12/post_13.html http://www5d.biglobe.ne.jp/~noocyte/Programming/Windows/WindowsTips.html#MoveToRecycleBin とかが参考になりそうです。 先程も書きましたが const _TCHAR cszPath[] = _TEXT ( "C:\\a.txt\0C:\\b.txt\0" ); の代入がうまく行きません。 ____________________________________________________________________________________________________________________________________ http://sysneitf.ifdef.jp/shell_filestotrash.html 以下、参考にした部分 // 複数ある場合は、パスを'\0'で区切る。終端は、'\0''\0'である必要がある  const _TCHAR cszPath[] = _TEXT ( "C:\\a.txt\0C:\\b.txt\0" ); // "c:\\a.txt"と"C:\\b.txt" をゴミ箱へファイルを移動するサンプル (シェルエミュレート)  SHFILEOPSTRUCT sfs;  memset ( &sfs, 0, sizeof ( SHFILEOPSTRUCT ) );  sfs.fFlags = FOF_NOERRORUI | FOF_SIMPLEPROGRESS | FOF_ALLOWUNDO;// ゴミ箱へ移動の確認をする場合  FOF_ALLOWUNDO をつける;  sfs.wFunc = FO_DELETE;  sfs.pFrom = cszPath;  if ( 0 != SHFileOperation ( &sfs ) )  {   MessageBox ( NULL,   _TEXT ( "SHFileOperation 失敗" ),   _TEXT ( "エラー" ),   MB_OK | MB_ICONSTOP );  } どなたか、お教え下さると嬉しいですm(_ _)m

  • ファイル・ディレクトリ削除を一度に

    特定のディレクトリ以下のファイルを全部削除、同時に その後ディレクトリも削除を一度にやってくれる サンプルをご存知ないでしょうか。 また、DeleteFile(); は ワイルドカードは使えない のでしょうか。。。

  • 削除可能か調べることできる?→ファイルコピー後にファイル削除(DeleteFile)をしたいが書き込みエラーが・・・

    ファイルコピー(CopyFile)後にそのコピー元のファイルを ファイル削除(DeleteFile)をしたいのですが書き込みエラー(70)が発生してしまいます。 削除の対象ファイルのサイズが大きいため削除処理を実行する瞬間にまだ、編集状態にあるために削除が行えないことがわかりました。 そこで、削除対象が削除可能か?を調べることは出来ませんか? 本当に困っています。教えてください!!

  • 不要なファイルを削除する方法

    Windows2000を使用しています。 webページの閲覧がかなり遅くなったので、 履歴やキャッシュを消去したのですが、 その他に、pc上の不要なファイルを削除しようと思っています。 例えば、tmpファイルなどです。 これらの明らかに削除しても大丈夫なファイルは どのように探し、削除すればよいのでしょうか? 分かる方いらっしゃいましたら、教えてください。

  • シェルでファイルの最下行を削除する方法

    シェルでファイルの最下行を削除する方法 シェルで、ファイルaaa.txtの最下行を削除したいです。これを1行で実現したいです。 exには-cってオプションがあるので、ex -c '$d' aaa.txt などと試してみましたがダメでした。 ;(コロン)や&&でつなぐのは、1行ではないって事でお願いします。 >cp aaa.txt tmp && sed '$d' tmp >aaa && rm tmp #こういうのは無しって意味です。 事前にスクリプトや、それ専用のバイナリを用意しておくのも無しでお願いします。なるべく汎用的な どこのUNIXにでもあるようなコマンドで実現したいです。

  • ファイルやフォルダをごみ箱に移動 その2

    直下の質問「ファイルやフォルダをごみ箱に移動」をさせていただいた者です。 「ファイルやフォルダをごみ箱に移動」を行うActiveX DLLを作成して、無事動作させることができました。が、新しい問題が発生してしまいました。 作成したルーチンは、以下の通りです。 ----- Public Sub GoToTrash(inStrItemNames As String, Optional inBlnConfirm As Boolean) Dim ShellOp As SHFILEOPSTRUCT Dim flg As Integer ' 確認メッセージの表示? If IsMissing(inBlnConfirm) Then inBlnConfirm = False If inBlnConfirm Then flg = FOF_ALLOWUNDO Else flg = FOF_ALLOWUNDO Or FOF_NOCONFIRMATION End If With ShellOp .hwnd = 0 .wFunc = FO_DELETE .pFrom = inStrItemNames .fFlags = flg End With ' ごみ箱へ削除実行 SHFileOperation(ShellOp) End Sub ----- これをActiveX化して、ASPから呼び出すと、ちゃんと動作して、指定されたファイルはごみ箱に直行します。しかし、存在しないファイルなどが指定されると、たとえ、FOF_NOCONFIRMATIONを指定したとしても、確認のDialogBoxが表示されてしまうようです。(WSHで確認しました) こうなると、ASPではスクリプトエンジンが処理を中断してしまうようで、以降再起動しない限り、ASPページが全く表示されなくなってしまいます。 なにか良い手段は無いでしょうか?

  • SHFileOperationについて

    初心者です。よろしくお願いします! 今回VB.NETでAPIのSHFileOperationを使っているのですが、思い通りにいかない部分があります。 ファイルをコピーする時に表示されるダイアログは表示しておきたいのですが、上書きなどを確認するダイアログは表示したくありません。 これは「FOF_NOCONFIRMATION」の値をセットすればいいんでしょうか? また、場合によっては確認のメッセージが必要な時があります。 そして、その確認メッセージのボタン情報を取得する事って言うのは可能でしょうか?「はい」や「すべて上書き」など・・・・・・。 わかりにくいかもしれないですが、よろしくお願いします!!

  • ワイルドカードで指定してファイル削除

    あるフォルダの中の「abc」で始まるExcelファイルを全て削除したいです。 ※「abc」で始まるExcelファイルが無ければ何もしない FileExistsでワイルドカードは使えないのはわかっているのですが、 何か良い代替案は有りますでしょうか。 try~catchなど試してみましたが、期待通りの動作をしてくれないため、 ご教示お願いいたします。 function Delete(sTargetFolder){ var oFilesys = WScript.CreateObject("Scripting.FileSystemObject"); var str str = sTargetFolder + "\\abc*.xls"; if(oFilesys.FileExists(str)==true){ oFilesys.DeleteFile(str.true); }

専門家に質問してみよう