2016-07-25 8 views
-1

これで、22日以上古いすべてのフォルダが削除されるバッチファイルが作成されました。毎週バッチファイルが実行されているときに問題はありません。ルートには常に4つのフォルダがあります。 休日がある場合、システムは最大3週間オフになります。その祝日の後にファイルが実行されると、3つのフォルダが削除されます。バッチファイルは、ルートに3つ以上のフォルダがある場合に最も古いフォルダを削除します。

私は今、最も古いフォルダだけが削除されるコマンドを探しているので、私はいつもバックアップ用に4つのフォルダを保持します。

フォルダの名前はbackup_YYYY-MM-DDです。

ご質問ありがとうございます。

+0

これは問題ではありませんが、タスク要求です!助けが必要な場合は、まずあなた自身の努力を示す必要があります!無料でコードを書いてはいけません!どうぞお求めください(http://stackoverflow.com/help/how-to-ask)! – aschipfl

+0

なぜそんなに厳しい?私はこのフォーラムでは新しく、「どのようにaks」を読んでいないのは残念です。すぐに投稿を更新します;) – ButerBreaGrieneTsiis

答えて

1

簡単に多かれ少なかれ単一のコマンドラインで次のバッチコードを使用して行うことができます。このタスク:

@echo off 
for /F "skip=3 delims=" %%I in ('dir "C:\Temp\backup_*" /AD /B /O-N 2^>nul') do rd /Q /S "C:\Temp\%%I" 

コマンドので/ADのリターンが原因/Bとの裸の形式で、ちょうどディレクトリ名を命じたDIRディレクトリ名C:\Temp/O-Nがあり、名前がbackup_で始まるため、名前が逆です。

名前を逆順にすると、日付フォーマットYYYY-MM-DDも日付順に自動的に使用されます。最新のバックアップフォルダが最初に出力され、最も古いフォルダが最後にコマンドDIRによって最後に出力されます。 FOR

コマンドコマンドDIRの出力の最初の3行をスキップし、したがって3つの最新のバックアップフォルダを無視します。他のすべてのバックアップフォルダはforで処理され、結果としてRDというコマンドで削除されます。それはパターンbackup_*に一致するフォルダを見つけることができない場合

コマンドDIRはSTDERRにエラーメッセージを出力します。このエラーメッセージは、STDERRからNULにエラーメッセージをリダイレクトすることによって、2>nulで抑制されます。リダイレクションオペレータ>は、ここでは^でエスケープする必要があります。そうしないと、Windowsコマンドインタープリタは、FORのリダイレクトを>として解釈し、構文エラーメッセージを表示します。

注:コマンドDIRここリターンだけで、バックアップフォルダ名パスを含まないため、親フォルダのパスがDIRコマンドに、コードに二度書かれており、また、コマンドRDにする必要があります。

使用されているコマンドとその動作方法を理解するには、コマンドプロンプトウィンドウを開き、次のコマンドを実行して、コマンドごとに表示されているすべてのヘルプページをすべてよく読んでください。

  • echo /?
  • dir /?
  • for /?
  • rd /?

Using command redirection operatorsに関するMicrosoftの記事を参照してください。

+0

ありがとうございます。それは魅力として働いているように見えます。 次回は投稿前に試したことを最初の投稿に追加します。 – ButerBreaGrieneTsiis

関連する問題