- - PR -
作成から 7 日経過した PDF ファイルをフォルダ (サブフォルダを含む) から削除する方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-02-19 11:39
- 環境
Windows Server 2000 SP4 (ファイルサーバー) - 要件 複合機のスキャナ機能からファイルサーバーへ保存される PDF ファイルを 7 日経過後に自動的に削除する。 ※PDF ファイルが保存されるファイルサーバーのフォルダは単一ではなく、部署により複数のサブフォルダが存在する。 例: Scanner (親フォルダ) | |- 関東営業本部 (サブフォルダ) | | | |- 情報システム部 | xxxxxx1.pdf (自動的に削除したいファイル) | xxxxxx2.pdf 〃 | |- 関西営業部 (サブフォルダ) | | | |- 営業企画部 | xxxxxx3.pdf (自動的に削除したいファイル) 上記の要件を満たす方法を探しています。 以下のスクリプトを見つけ、対象のファイルを PDF に変更して実行したところ、単一フォルダ内の 7 日経過した PDF ファイルは削除できました。 - Microsoft TechNet フォルダ内の作成から 7 日を経過したすべての .BAK ファイルを削除する方法はありますか http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/nov06/hey1117.mspx ~~~~~~~~~~~~~~~~~~~~~~~~ dtmDate = Date - 7 strDay = Day(dtmDate) If Len(strDay) < 2 Then strDay = "0" & strDay End If strMonth = Month(dtmDate) If Len(strMonth) < 2 Then strMonth = "0" & strMonth End If strYear = Year(dtmDate) strTargetDate = strYear & strMonth & strDay strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set FileList = objWMIService.ExecQuery _ ("ASSOCIATORS OF {Win32_Directory.Name='C:\Scripts'} Where " _ & "ResultClass = CIM_DataFile") For Each objFile In FileList strDate = Left(objFile.CreationDate, 8) If strDate < strTargetDate Then If objFile.Extension = "bak" Then objFile.Delete End If End If Next ~~~~~~~~~~~~~~~~~~~~~~~~ このときに指定したフォルダのパスは、以下のとおりです。 \\Fileserver01\Scanner\関東営業本部\情報システム部 要件を満たすためには、フォルダのパスを以下のように親フォルダを指定してスクリプトを実行する必要があります。 \\Fileserver01\Scanner このようにパスを指定すると Scanner 配下の PDF ファイルは削除されますが、サブフォルダ配下の PDF ファイルは削除されません。(スクリプトにそのような記述がないので当然ですが。。) スクリプトで削除する対象のフォルダにサブフォルダを含める必要があることは分かったのですが、初心者のためその方法が分かりません。 以下のスクリプトを参考にして、上記のスクリプトにサブディレクトリを含める記述を追記したいのですが、どのように記述をすればよいのか分からず、詳しい方に教えていただきたいと思い投稿させていただきました。 - Microsoft TechNet フォルダとそのサブフォルダ内のすべての PDF ファイルの一覧を取得する方法はありますか http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/jun07/hey0608.mspx ~~~~~~~~~~~~~~~~~~~~~~~~ strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") strFolderName = "C:\Test" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.CreateTextFile("C:\Scripts\Test.txt") Set colSubfolders = objWMIService.ExecQuery _ ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _ & "Where AssocClass = Win32_Subdirectory " _ & "ResultRole = PartComponent") Set colFiles = objWMIService.ExecQuery _ ("ASSOCIATORS OF {Win32_Directory.Name='" & strFolderName & "'} Where " _ & "ResultClass = CIM_DataFile") For Each objFile in colFiles If objFile.Extension = "pdf" Then objTextFile.WriteLine objFile.FileName End If Next For Each objFolder in colSubfolders GetSubFolders strFolderName Next Sub GetSubFolders(strFolderName) Set colSubfolders2 = objWMIService.ExecQuery _ ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _ & "Where AssocClass = Win32_Subdirectory " _ & "ResultRole = PartComponent") For Each objFolder2 in colSubfolders2 strFolderName = objFolder2.Name Set colFiles = objWMIService.ExecQuery _ ("ASSOCIATORS OF {Win32_Directory.Name='" & strFolderName & "'} Where " _ & "ResultClass = CIM_DataFile") For Each objFile in colFiles If objFile.Extension = "pdf" Then objTextFile.WriteLine objFile.FileName End If Next GetSubFolders strFolderName Next End Sub ~~~~~~~~~~~~~~~~~~~~~~~~ 自分でももう少し勉強して調べてみますが、今月中に実現しなければならない要件であり、一人では何もできない状況です。 申し訳ありませんが、ご教示いただければ幸いです。 [ メッセージ編集済み 編集者: DJ517 編集日時 2009-02-19 12:59 ] | ||||
|
投稿日時: 2009-02-19 13:11
こんにちは。
2つ目のスクリプトに、1つ目のスクリプトの日時判定部分を追加して、 objTextFile.WriteLine objFile.FileName → objFile.delete と するだけでOKかと。 | ||||
|
投稿日時: 2009-02-19 13:31
2つ目のスクリプトって冗長な気がするんですが、
これじゃだめなのですかね?? (C:\Test配下のpdfファイル名をc:\test\test.txtに列挙するスクリプト)
IKE さんのおっしゃるように、私も2つ目に日付判定を移植したほうがらくだと思います。 (2つ目はテキストファイルも出力してるので、その辺も注意が必要ですが) | ||||
|
投稿日時: 2009-02-19 15:15
IKE さん、デューンさん
ご返答ありがとうございます。 ご指示いただいたとおりに 2 つ目のスクリプトに日時判定部分を追記したところ、無事にサブフォルダの PDF ファイルも削除することができました! お忙しいところ本当にありがとうございました! なお、スクリプトは最終的に以下のように記述しました。
テキストへの出力は必要なかったので 2 つ目のスクリプトの以下の 2 行は削除しました。 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.CreateTextFile("C:\Scripts\Test.txt") また、strFolderName に UNC を指定するとエラーが発生して実行できなかったため、ドライブからのパスにしました。 スクリプト言語についてはまったくの初心者のため丸二日間試行錯誤していましたが、IKE さん、デューンさんの助言のおかげでなんとか期日までに間に合いそうです。 これを機に WMI や PowerShell の勉強をがんばりたいと思いますので、今後ともよろしくお願いいたします。 [ メッセージ編集済み 編集者: DJ517 編集日時 2009-02-19 15:19 ] | ||||
|
投稿日時: 2009-02-19 17:17
おめでとうございます。
PowerShellならもっと楽にかけたかも知れませんが、 残念ながらwindows2000では使えないのですよね。 ご存知かもしれませんが補足まで。 |
1