これが私がやろうとしていることです:
。cmdスクリプトでforfilesコマンドを使用して、eより古い指定されたパスからフォルダーを削除します。 g。 win7マシンで2日間。
編集:状況はパスXの下で次のとおりです:\ backupsは毎日のバックアップを含むフォルダですe。 g。 2014年6月25日次のフォルダ2014年6月24日など。
これに関する私の質問は今です:
それで、それを正しく行う方法は?
Forfilesの参照: http://technet.Microsoft.com/de-de/library/cc753551%28v=ws.10%29.aspx
ご挨拶!
その名前にもかかわらず、forfiles
コマンドは両方のファイルフォルダーとフォルダーを処理できます。これがその仕事をするバッチスクリプトです:
@echo off
setlocal
set target=X:\backups
set days=-2
for /f "usebackq delims=" %%G in (
`forfiles /p "%target%" /c "cmd /c if /i @isdir == true echo @path" /d %days% 2^>nul`
) do echo rd /s /q "%%~G"
pause
endlocal & exit /b
まず、target
変数とdays
変数が初期化されます。最初のものはスキャンしたいフォルダに設定され、後者は日数です。負の値は、古いか等しいを意味します。
次に、以前に設定したフォルダーと日数を指定して、forfiles
コマンドを実行します。結果ごとに、特別な@isdir
変数がチェックされます:値がtrue
の場合、現在のエントリはフォルダであり、その@path
がエコーされます。次に、コマンド出力が解析され、一致するすべてのフォルダーが取得され、それらが削除されます。安全上の理由から、追加のecho
コマンドがあり、適切なフォルダーが削除されているかどうかを確認できます。
再帰スイッチを使用する場合(/s
)、すべてのファイル、フォルダー、およびそれらのサブフォルダーが処理されます。この場合、あなたはしたくありません。そうしないと、新しいフォルダに含まれている古いサブフォルダが削除されてしまう可能性がありますが、まったく触れないでください。
これが1行のPowerShellアプローチです。
get-childitem "x:\backups" |? {$_.psiscontainer -and $_.lastwritetime -le (get-date).adddays(-2)} |% {remove-item $_ -force -whatif}
Adddays 'パラメーターを使用して年齢のしきい値を調整できます。これはまだ「WhatIf」モードなので、最初にテストして何が起こるかを確認できます。 -whatifを削除して、実際にフォルダーを削除するようにします。
出典: TechNetフォーラム