- ベストアンサー
高度なバッチファイル作成方法
- WindowsXPの『C:atch』フォルダにあるバッチファイルの作成に困っております。
- 『D: est』フォルダにある3つのファイルを処理する方法を教えてください。
- ファイルの更新日付を確認し、一番新しいファイル以外をバックアップフォルダにコピーし、削除するバッチファイルを作成したいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
vbscriptで記述したWSHでできると思われます。 サンプルコードを記載します。 テキストファイルに貼り付けて、拡張子を、.vbs にして実行すればよいです。 (いちおう実機検証はしてみましたが、このコードの実行上発生する いかなる損害も負いかねますので、十分ご検証の上、自己責任で お願いいたします。) ファイルコピーと、削除を別に実行したい場合は、 (1)、(2)、(3)を、コピー実行プログラムとして、1ファイル (1)、(2)、(4)を、削除実行プログラムとして、1ファイルにそれぞれして 実行すればよいかと思います。 以下サンプルコードです。 '(1) Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") objStartFolder = "D:\\test" Set objFolder = objFSO.GetFolder(objStartFolder) Set colFiles = objFolder.Files fileName = "" maxDate = 0 '(2) '更新日が最も新しいファイルのファイル名を取得 For Each objFile in colFiles If objFile.DateLastModified > maxDate Then maxDate = objFile.DateLastModified fileName = objFile.Name End If Next '(3) 'ファイルコピー(ただし、更新日が最も新しいファイルは除外) For Each objFile in colFiles If objFile.Name <> fileName Then objFile.Copy("D:\\test\\bak\\" + objFile.Name) End If Next '(4) 'ファイル削除(ただし、更新日が最も新しいファイルは除外) For Each objFile in colFiles If objFile.Name <> fileName Then objFile.Delete End If Next
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
MOVEを使わず、お書きのように2ステップに分けると、(1)と(2)のちょうど間のタイミングでファイルが出来ると、コピーされずに削除されるファイルが出来てしまいますが、そういう可能性はないですか? MOVEが危険というのをどこで読んだか知りませんが、デマでしょう。 cd /d D:\test for /f "skip=1" %%F in ('dir /b /o-d CS_???.txt') do copy %%F D:\test\bkp for /f "skip=1" %%F in ('dir /b /o-d CS_???.txt') do del %%F