[前の記事]« [win2000]隠しファイルも含めて一括削除したい
[次の記事][VBS]変数の途中に文字列を挿入するには »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「DATE,TIME…日付、時刻の取得/利用」索引へ
▲カテゴリー「DEL,ERASE,REN…ファイル削除/復活/移動/名前の変更」索引へ

[NT系]1年以上更新されていないファイルを自動削除したい

346.
1年以上更新の無いファイルを削除したい
2005年03月24日(木) 17時56分
tat
皆様、お世話になります。

環境は Windows 2003 Server です。

ファイル サーバとして使用しているのですが、1年以上、更新の無いファイルを、毎月1日に削除したいと思います。

私のつたないDOS経験でも、バッチをスケジュールすることは AT コマンドか Windows 標準の「タスク」でできるのですが、以下の処理が思い浮かびません。

・ファイルの更新日付を取得
・処理を行う日(毎月の1日)と比較
・サブフォルダ内の全ファイルが対象

for のヘルプから、
  for /R D:\ %%f in (*)
かな?程度はわかったのですが
それ以上先に進まず悩んでいます

よろしくお願いします
352.
Re:1年以上更新の無いファイルを削除したい
2005年03月25日(金) 16時15分
otn
>皆様、お世話になります。

>環境は Windows 2003 Server です。

>ファイル サーバとして使用しているのですが、1年以上、更新の無いファイルを、毎月1日に削除したいと思います。

出来合いのツールを使うのも一法です。
http://www.kawabata.com/delold.asp

>私のつたないDOS経験でも、バッチをスケジュールすることは AT コマンドか Windows 標準の「タスク」でできるのですが、以下の処理が思い浮かびません。

>・ファイルの更新日付を取得

for %%F の %%~tF で更新日時が取れます。その第一トークンが更新日付。

>・処理を行う日(毎月の1日)と比較

if .. lss .. などと文字列として比較すればいいでしょう。

>・サブフォルダ内の全ファイルが対象

>for のヘルプから、
>  for /R D:\ %%f in (*)
>かな?程度はわかったのですが

隠し属性ファイルが対象外ならこれでいいです。対象にするなら、
for /f "delims=" %%f in ('dir /a-d /b /s D:\') do
(del にも /a オプションが必要)

まとめると、
set Y=%DATE:~0,4%
set M=%DATE:~5,2%
set /a Y-=1
set YMD=%Y%/%M%/01
for /r d:\ %%F in (*) do for /f %%D in ("%~tF") do if %%D lss %YMD% del /f "%%F"
358.
Re2:1年以上更新の無いファイルを削除したい
2005年04月05日(火) 11時20分
tat
回答ありがとうございます
試してみます

返事が遅れてすみませんでした
361.
Re2:1年以上更新の無いファイルを削除したい
2005年04月05日(火) 14時39分
tat
すみません
せっかく回答いただいたのに
要件を間違えていました

ファイルの「アクセス日時」をチェックして
1年以上だれもアクセスしなかったファイルを
削除したいというものでした

もう一度質問しなおします

ありがとうございました
363.
Re3:1年以上更新の無いファイルを削除したい
2005年04月05日(火) 23時28分
こぶん
>ファイルの「アクセス日時」をチェックして
>1年以上だれもアクセスしなかったファイルを
>削除したいというものでした

@echo off
dir /A-d /TA /C /N
set Y=%DATE:~0,4%
set M=%DATE:~5,2%
set D=%DATE:~8,2%
set /a Y-=1
set YMD=%Y%/%M%/%D%
for /F "skip=4 tokens=1,2,3,* delims=の " %%f in ('dir /A-d /TA /-C') do if %%f LSS %YMD% if %%g NEQ 個 def /F /A-D %%i

こんな感じでしょうか。
dirで最終アクセス時刻を表示させるようにすると要約がついてしまってとってもやりにくいですね…
366.
Re4:1年以上更新の無いファイルを削除したい
2005年04月07日(木) 01時56分
otn
>>ファイルの「アクセス日時」をチェックして
>>1年以上だれもアクセスしなかったファイルを
>>削除したいというものでした

>@echo off
>dir /A-d /TA /C /N
>set Y=%DATE:~0,4%
>set M=%DATE:~5,2%
>set D=%DATE:~8,2%
>set /a Y-=1
>set YMD=%Y%/%M%/%D%
>for /F "skip=4 tokens=1,2,3,* delims=の " %%f in ('dir /A-d /TA /-C') do if %%f LSS %YMD% if %%g NEQ 個 def /F /A-D %%i

>こんな感じでしょうか。

これだと、サブディレクトリに対応してないですよね。まずフルパスでファイル名を求めて、それぞれのファイルに対して dir /ta を実行するようなことをしないといけない。

set Y=%DATE:~0,4%
set M=%DATE:~5,2%
set D=%DATE:~8,2%
set /a Y-=1
set YMD=%Y%/%M%/%D%
for /f "delims=" %%F in ('dir /a-d /b /s D:\') do call :sub "%%~F"
goto :eof
:sub
for /f "skip=4" %%A in ('dir /a /ta "%~1"') do (
 if %%A lss %YMD% del /a /f "%~1"
 goto :eof
)

>dirで最終アクセス時刻を表示させるようにすると要約がついてしまってとってもやりにくいですね…

上記だと対象が1ファイルなので、5行目を処理してgotoしてしまえばいいですが、一般的には、('dir .... ^|findstr "^[0-9]"') でしょうか。
565.
Re:1年以上更新の無いファイルを削除したい
2005年06月16日(木) 16時02分
tat
書き込みありがとうございます
早速使用させていただいております

削除対象のファイルをいきなり削除せず
一時的にフォルダへ移動しログを残す機能を考えています


> if %%A lss %YMD% del /a /f "%~1"
> goto :eof

上の箇所を
まずログを残すように変更しました


---
if %%A lss %YMD% echo %%A %~1 > c:\log\log.txt
---


ファイル移動のコマンドを追加するため
else を使用して 以下のようにしてみました


---
if %%A gtr %YMD% goto :eof else (
echo %%A "%~1" > c:\log\log.txt
move "%~1" d:\sakujoyotei)
---


C:\test にテスト用の古いファイルを用意して実行すると
log.txt には以下の 4 行が出力されファイルは移動されます


---
2000/1/1 C:\test\test.txt
1 C:\test\test.txt
C:\test\test.txt が見つかりません。
0 C:\test\test.txt
C:\test\test.txt が見つかりません。
---


ログだけ残す式では Log.txt へ書き出した %%A が
「2000/1/1 C:\test\test.txt」だったので
%%A をそのまま使用すれば良いと思ったのですが・・・

私の %%A の解釈が間違っているのでしょうか?

たびたび申し訳ありませんが
お知恵を拝借したく
お願いいたします
566.
Re:1年以上更新の無いファイルを削除したい
2005年06月16日(木) 16時11分
tat
すみません
解決しました

& を使えば
一行にいくつも文が書けるんですね

知りませんでした

if %%A lss %YMD% echo %%A "%~1" > c:\log\log.txt & move "%~1" d:\temp

でできました

ありがとうございました
 
 


カテゴリー「DATE,TIME…日付、時刻の取得/利用」索引へ
カテゴリー「DEL,ERASE,REN…ファイル削除/復活/移動/名前の変更」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2005年03月24日 09:07に投稿されたエントリーのページです。

ひとつ前の投稿は「[win2000]隠しファイルも含めて一括削除したい」です。

次の投稿は「[VBS]変数の途中に文字列を挿入するには」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート