使用しているコマンドラインは(私はここでそれをコピーして、スイッチを並べ替え)は非常に危険である:
forfiles /S /D -30 /P "C:\PATH\USERS\PATH\" /M "*.*" /C "cmd /C del /Q @path"
forfiles
ため、戻りのファイルとディレクトリの両方。検索条件(30日前またはそれ以前の最終更新日)に一致するcontainer
というディレクトリがあると仮定すると、実行されたdel
コマンドラインはdel "C:\PATH\USERS\PATH\container" /Q
です。すべてのファイルで、検索条件を満たしていないファイルも含まれます(del \folder
は動作しますdel \folder\*
のように)。
は、この問題を解決するために、あなたはこのように、ファイルやディレクトリをフィルタリングする必要があります、すべての内部コマンドではなく、ない
forfiles
ので
forfiles /S /D -30 /P "C:\PATH\USERS\PATH" /M "*" /C "cmd /C if @isdir==FALSE del @path"
は、私はまた、*
に*.*
からファイルマスクを変更しました*.*
の場合は、拡張子のないファイルと一致します。さらに、末尾の\
をパスから削除しました。そうしないと、forfiles
はエラーを発生させます。ERROR: The directory name is invalid.
。
しかし、今は完全に別の何かのために - あなたの実際の質問への答え:それはそのサブアイテムを返し前forfiles /S
がディレクトリを返しますので
、それは意味がないかどうかをチェックしますかディレクトリが空であるか同じコマンドラインにない場合、後でそれを行う必要があります。そのために
、あなたはこのような二forfiles
ループを使用するか(あなたが好きな場合にも、彼らの最終更新日時をチェックし、そうでない場合、/D -30
部分を削除):もし
forfiles /S /D -30 /P "C:\PATH\USERS\PATH" /M "*" /C "cmd /C if @isdir==TRUE rd @path 2> nul"
または代わりに、ディレクトリの変更日は関係ありません、あなたも高速ですfor /D
ループ、使用することができます。フォルダを削除するには、[RD](http://ss64.com/nt/rd.html)を使用
for /D %%I in ("C:\PATH\USERS\PATH\*") do rd "%%~fI" 2> nul
を。あなたが '/ s/q 'を指定しない限り、emty以外のフォルダは削除されません。 – Stephan
フォルダが30日前かどうかチェックしますか?もしそうなら、 '@ isdir'変数を使ってディレクトリのみをチェックし、そのディレクトリを削除してください。 – Squashman